C++での因子の組み合わせ
番号があるとします。数字はその要因の積と見なすことができます。したがって、8 =2 x 2 x 2; =2 x 4.整数nを取り、その因子のすべての可能な組み合わせを返す1つの関数を作成する必要があります。
したがって、入力が12のような場合、出力は[[2、6]、[2、2、3]、[3、4]]
になります。これを解決するには、次の手順に従います-
-
関数solve()を定義します。これには、n、target、start、
が必要です。 -
retと呼ばれるリストの1つのリストを定義します
-
nが1と同じ場合、-
-
retを返す
-
-
nがターゲットと等しくない場合、-
-
retの最後にnを挿入します
-
-
初期化i:=開始の場合、i * i <=nの場合、更新(iを1増やします)、実行-
-
n mod iが0と同じ場合、-
-
その他=solve(n / i、target、i)
-
初期化j:=0の場合、j <他のサイズの場合、更新(jを1増やします)、実行-
-
other [j]
の最後にiを挿入します -
retの最後にother[j]を挿入します
-
-
-
-
retを返す
-
メインの方法から、次のようにします-
-
リターンsolve(n、n、2)
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; void print_vector(vector<vector<auto< > v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << "["; for(int j = 0; j <v[i].size(); j++){ cout << v[i][j] << ", "; } cout << "],"; } cout << "]"<<endl; } class Solution { public: vector < vector <int< > solve(int n, int target, int start){ vector < vector <int< > ret; if(n == 1){ return ret; } if(n != target){ ret.push_back({n}); } for(int i = start; i * i <= n; i++){ if(n % i == 0){ vector < vector <int< > other = solve(n / i, target,i); for(int j = 0; j < other.size(); j++){ other[j].push_back(i); ret.push_back(other[j]); } } } return ret; } vector<vector<int<> getFactors(int n) { return solve(n, n, 2); } }; main(){ Solution ob; print_vector(ob.getFactors(16)); }
入力
16
出力
[[8, 2, ],[4, 2, 2, ],[2, 2, 2, 2, ],[4, 4, ],]
-
C++でのカプセル化
カプセル化は、データと、データを操作するメソッドを1つのコンポーネントにまとめ、外部からの干渉から保護します。本質的に、カプセル化には、データとデータを使用する関数をバンドルすることが含まれます。データのカプセル化は、データの非表示という非常に重要な概念につながります。 C ++でのカプセル化は、ユーザー定義のデータ型であるクラスを使用して実装されます。これらのクラスには、データ型と、一緒にバインドされたメソッドが含まれています。 クラスを使用したC++でのカプセル化を表すプログラムは次のとおりです。 例 #include <iostream> using namespace
-
C++での組み合わせ
2つの整数nとkがあるとします。 1...nからk個の可能なすべての組み合わせを見つける必要があります。したがって、n=4およびk=2の場合、組み合わせは[[1,2]、[1,3]、[1,4]、[2,3]、[2,4]、[3,4 ]] これを解決するには、次の手順に従います- これを解決するために再帰関数を使用します。関数solve()は、n、k、一時配列を取得して開始します。開始は最初は1です。これは次のように動作します temp配列のサイズ=kの場合、tempをres配列に挿入し、戻ります for i:=start to n、 iを一時的に挿入 solve(n、k、temp、i + 1