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

C++での数値の4つの因数の積を最大化する


タスクが与えられた場合、条件-

が与えられた場合、与えられた数Nの4つの因子A、B、C、Dから得られる最大積を計算することです。

4つの要素の合計は、数値Nに等しくなければなりません。つまり、N =A + B + C+Dです。

入力 − n =10

出力 − 20

説明 − 10の因数は次のとおりです:1、2、5、10。

最大の積は、5 * 2 * 2 * 1 =20を掛けることによって得られ、また、与えられた条件、つまり5 + 2 + 2 + 1=10を満たします。

入力 − n =16

出力 − 256

説明 − 16の因数は、1、2、4、8、16です。

最大の積は、4 * 4 * 4 * 4 =256を掛けることで得られ、また、与えられた条件、つまり4 + 4 + 4 + 4=16を満たします。

以下のプログラムで使用されるアプローチは次のとおりです

  • int型の配列Factors[]を作成して、指定された数の因子を格納し、int型の変数K =0を作成して、占有されている配列のサイズを追跡します。

  • 関数FindFactors()を作成して、指定された数値の因数を見つけます。

  • i=1からループします。 i * i <=N; i ++

  • ループ内でif(N%i ==0)を設定して、Iが因子であるかどうかを確認します。

  • iが因子である場合は、(N / I ==i)かどうかを確認します。はいの場合はiをFactors[]に挿入し、そうでない場合はN/iとiの両方をFactors[]に渡します。

  • 関数Product()を作成して、因子から最大の積を見つけます。

  • int product=0を初期化します。およびsize=K + 1;

  • 4つの新しいネストされたループを初期化し、「サイズ」になるまで実行します。

  • ループ内で、int sum =Factors [i] + Factors [] + Factors [k] + Factors [l];

    を初期化します。
  • (sum ==N)かどうかを確認し、そうであれば、pro =Factors [i] * Factors [j] * Factors [k] * Factors [l];

    を初期化します。
  • 次に、(pro> product)かどうかを確認し、そうであれば、product =pro;

    を入力します。
  • 返品

#include <bits/stdc++.h>
using namespace std;
//Array to store the factors
int Factors[30];
int K=0;
//Function to find out the factors
int FindFactors(int N){
   //Looping until i reaches the sqrt(N)
   for (int i = 1; i * i <= N; i++){
      if (N % i == 0){
         /* if both the factors are same then only one will be inserted*/
         if ((N / i) == i){
            Factors[K]=i;
            K++;
         }
         else{
            //Inserting 1st factor in array
            Factors[K]=N/i;
            K++;
            //Inserting 2st factor in array
            Factors[K]=i;
            K++;
         }
      }
   }
}
// Function to find the maximum product
int Product(int N){
   int product = 0;
   int size = K+1;
   for (int i = 0; i < size; i++)
      for (int j = 0; j < size; j++)
         for (int k = 0; k < size; k++)
            for (int l = 0; l < size; l++){
               //Adding each set of factors
               int sum = Factors[i] + Factors[j] + Factors[k] + Factors[l];
               //Checking if the sum is equal to N
               if (sum == N){
                  //Multiplying the factors
                  int pro = Factors[i] * Factors[j] * Factors[k] * Factors[l];
                  //Replacing the value of product if a larger value is found
                  if(pro > product)
                     product = pro;
               }
            }
   return product;
}
//Main function
int main(){
   int N = 10;
   //Calling function to find factors of N
   FindFactors(N);
   //Calling function to find the maximum product
   cout<<Product(N);
   return 0;
}

出力

上記のコードを実行すると、次の出力が得られます-

Maximum Profit: 20

  1. C ++でサブ配列を反転して、0の数を最大化します

    問題の説明 バイナリ配列が与えられた場合、サブ配列の1回の反転が許可されている配列内のゼロの最大数を見つけます。フリップ操作は、すべての0を1に、1を0に切り替えます arr1 ={1、1、0、0、0、0、0}の場合 最初の21を0に反転すると、次のようにサイズ7のサブ配列を取得できます- {0, 0, 0, 0, 0, 0, 0} アルゴリズム 1. Consider all subarrays and find a subarray with maximum value of (count of 1s) – (count of 0s) 2. Considers this

  2. C++での最大積4倍の数を見つける

    n個の要素を持つ1つの整数配列があるとします。配列内の4倍の最大積を見つける必要があります。したがって、配列が[3、5、20、6、10]のような場合、最終積は6000であり、4倍の要素は10、5、6、20です。 これを解決するには、次の手順に従います- 配列を昇順で並べ替えます xが最後の4つの要素の積、yが最初の4つの要素の積、zが最初の2つと次の2つの要素の積であると仮定します x、y、zの最大値を返します。 例 #include<iostream> #include<algorithm> using namespace std; int maxQuadP