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

C++でax+by + cz =nとなるように、x + y+zの値を最大化します。


整数a、b、c、nが与えられます。目標は、ax + by + cz =nとなるようにx、y、zの合計を最大化することです。

上記の式から

cz=n-(ax+by)
z= (n- (ax+by))/c

xとyを固定することにより、x、y、zごとに、上記の式を使用してzを計算します。合計を計算し、取得したそのような合計の最大値を保存します。

入力

n = 6, a = 3, b = 4, c = 5;

出力

maximum x+y+z is 2.

説明 − x =2、y =0、z =0の場合ax+by + cz=n。

3 * 2 + 0 * 4 + 0 * 5 =6 =n

入力

n = 4, a = 3, b = 1, c = 2;

出力

maximum x+y+z=4

説明 − x =0の場合、y=4およびz=4 ax + by + cz=n。

0 * 3 + 4 * 1 + 0 * 2 =4 =n

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

  • 整数a、b、c、およびnは、式ax + by + cz=nに使用されます。

  • 関数maximize(、int n、int a、int b、int c)は、入力としてa、b、c、およびnを取り、ax + by + cz =nとなるx、y、およびzの可能な最大合計を返します。

    >
  • 可能なすべてのax値を取り、for(i =0; i <=n; i + =a)、また

  • (j =0; j <=n; j + =b)、

    の値で可能な限りすべてを取る
  • z =(n-(ax + by))/cを計算します。

  • ここで、x =i/aおよびy=j/bです。 x + y + zを計算し、一時的に保存します。

  • これまでにtemp> =maxxの場合は、maxxを更新します。

  • 必要な合計としてmaxxを返します。

#include <bits/stdc++.h>
using namespace std;
int maximize(int n, int a, int b, int c){
   int maxx = 0;
   // i for possible values of ax
   for (int i = 0; i <= n; i += a)
      // j for possible values of by
   for (int j = 0; j <= n - i; j += b) {
      float z = (n - (i + j)) / c;
      // If z is an integer
      if (floor(z) == ceil(z)) {
         int x = i / a;
         int y = j / b;
         int temp=x+y+z;
         if(temp>=maxx)
            maxx=temp;
      }
   }
   return maxx;
}
int main(){
   int n = 6, a = 3, b = 4, c = 5;
   cout <<"Maximized the value of x + y + z :"<<maximize(n, a, b, c);
   return 0;
}

出力

Maximized the value of x + y + z :2

  1. n!となるようなxの最大値を見つけます。 %(k ^ x)=0(C ++の場合)

    2つの整数nとkがあるとします。 n!のようなxの最大値を見つける必要があります。 mod(k ^ x)=0。したがって、n =5、k =2の場合、出力は3になります。Asn! =120、xの値が異なると、次のようになります- 120 mod 2 ^ 0 =0、120 mod 2 ^ 1 =0、120 mod 2 ^ 2 =0、120 mod 2 ^ 3 =0、120 mod 2 ^ 4 =8、120 mod 2 ^ 5 =24、120 mod 2 ^ 6 =56、120 mod 2 ^ 7=120。x=3の最大値として、結果は0であるため、出力は3です。 これを解決するには、次の手順に従

  2. 配列がC++でバランスが取れるように、追加する最小値を見つけます

    n個の要素を持つ配列Aがあるとします。そして、nは偶数です。配列のバランスを取るために必要な値を見つける必要があります。配列のサイズが均一であるため、2つの半分を作成できます。左半分の合計と右半分の合計のバランスをとる必要があります。したがって、配列がA =[1、2、3、2、5、3]の場合、左半分の合計は6で、右半分の合計は10です。したがって、配列のバランスをとるには4が必要です。 タスクは単純です。前半と後半の合計を見つけてから、絶対差を見つけて戻ります。 例 #include<iostream> #include<cmath> using namespace s