Computer >> Máy Tính >  >> Lập trình >> C ++

Tối đa hóa giá trị của x + y + z sao cho ax + by + cz =n trong C ++

Chúng tôi được cho với các số nguyên a, b, c, n. Mục đích là tối đa hóa tổng của x, y và z sao choax + by + cz =n.

Từ công thức trên,

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

Bằng cách sửa x và y, hãy tính z theo công thức trên, cho mỗi x, y và z. Tính tổng và lưu trữ số tiền lớn nhất thu được.

Đầu vào

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

Đầu ra

maximum x+y+z is 2.

Giải thích - với x =2, y =0 và z =0 ax + by + cz =n.

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

Đầu vào

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

Đầu ra

maximum x+y+z=4

Giải thích - với x =0, y =4 và z =4 ax + by + cz =n.

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

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Các số nguyên a, b, c và n được sử dụng cho biểu thức ax + by + cz =n.

  • Hàm tối đa hóa (, int n, int a, int b, int c) nhận a, b, c và n làm đầu vào và trả về chúng tổng tối đa có thể có của x, y và z sao cho ax + by + cz =n.

  • Lấy tất cả các giá trị ax có thể có, cho (i =0; i <=n; i + =a), cả

  • Nhận tất cả các giá trị có thể cho (j =0; j <=n; j + =b),

  • Tính z =(n- (ax + by)) / c.

  • Bây giờ x =i / a và y =j / b. Tính x + y + z và lưu trữ trong nhiệt độ.

  • Nếu tạm thời> =maxx cho đến nay, hãy cập nhật maxx.

  • Trả lại maxx như số tiền mong muốn.

Ví dụ

#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;
}

Đầu ra

Maximized the value of x + y + z :2