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