C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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, ],]

  1. C++でのカプセル化

    カプセル化は、データと、データを操作するメソッドを1つのコンポーネントにまとめ、外部からの干渉から保護します。本質的に、カプセル化には、データとデータを使用する関数をバンドルすることが含まれます。データのカプセル化は、データの非表示という非常に重要な概念につながります。 C ++でのカプセル化は、ユーザー定義のデータ型であるクラスを使用して実装されます。これらのクラスには、データ型と、一緒にバインドされたメソッドが含まれています。 クラスを使用したC++でのカプセル化を表すプログラムは次のとおりです。 例 #include <iostream> using namespace

  2. 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