在C++中,最大化x + y + z的值,條件是ax + by + cz = n


給定整數a、b、c、n。目標是最大化x、y和z的和,使得ax+by+cz=n。

根據上述公式:

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

固定x和y,使用上述公式計算z,對於每個x、y和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=0,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作為輸入,並返回x、y和z的最大可能和,使得ax+by+cz=n。

  • 獲取所有可能的ax值,for(i=0;i<=n;i+=a),以及

  • 獲取所有可能的by值,for(j=0;j<=n;j+=b),

  • 計算z= (n- (ax+by))/c。

  • 現在x=i/a,y=j/b。計算x+y+z並將結果儲存在temp中。

  • 如果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

更新於:2020年7月28日

291 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告