在 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,对于每个 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 作为输入并返回 x、y 和 z 的最大可能总和,使得 ax+by+cz=n。

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

  • 取所有可能的值 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 表示 ax 的可能值
   for (int i = 0; i <= n; i += a)
      // j 可能的值
   for (int j = 0; j <= n - i; j += b) {
      float z = (n - (i + j)) / c;
      // 如果 z 是整数
      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