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

Tối đa hóa lợi nhuận khi phép chia hết cho hai số có lợi nhuận liên kết trong C ++


Chúng tôi được cung cấp với năm số nguyên N, A, B, X Y . Mục tiêu là tối đa hóa lợi nhuận bằng cách kiểm tra xem giữa các số trong phạm vi [1 đến N], nếu

  • Một số chia hết cho A thì lợi nhuận tăng thêm X .

  • Số A chia hết cho B thì lợi nhuận tăng thêm Y .

Chỉ có thể thêm lợi nhuận một lần cho một số cụ thể trong phạm vi.

Hãy cùng hiểu với các ví dụ.

Đầu vào - N =4, A =2, B =3, X =2, Y =3

Đầu ra - Lợi nhuận tối đa là - 7

Giải thích -

2,4 chia hết cho A (2). Lợi nhuận tăng từ 0 lên 2, sau đó 2 lên 4 (x =2)

3 chia hết cho B (3). Lợi nhuận tăng từ 4 lên 7. (theo Y =3)

Đầu vào - N =5, A =2, B =4, X =1, Y =3

Đầu ra - Lợi nhuận tối đa là:4

Giải thích -

2,4 chia hết cho A (2).

4 cũng chia hết cho B (4).

Đối với 2 lợi nhuận tăng từ 0 lên 1 (bằng X). Đối với 4, chúng tôi đã chọn chia hết cho B. Vì vậy, lợi nhuận tăng Y chứ không phải X vì Y nhiều hơn. Vì vậy, nó tăng từ 1 lên 4 (theo Y =3).

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

  • Chúng ta có các số nguyên N, A, B, X, Y.

  • Hàm MaximumProfit (int n, int a, int b, int x, int y) tính toán lợi nhuận và trả về giá trị. Nó nhận tất cả các biến làm tham số và trả về lợi nhuận tối đa.

  • Lợi nhuận biến đổi sẽ có một lượng lợi nhuận, ban đầu bằng 0.

  • Bắt đầu từ 1 đến n, kiểm tra tính chia hết của i cho a và b, sử dụng vòng lặp for

  • Nếu tôi chia hết cho cả a và b thì tăng lợi nhuận lên x hoặc y tùy theo giá trị nào lớn hơn.

  • Ngược lại, nếu tôi chia hết cho một duy nhất, hãy tăng lợi nhuận lên x

  • Ngược lại, nếu tôi chỉ chia hết cho b, hãy tăng lợi nhuận cho y

  • Kết quả là, giá trị trả lại cuối cùng sẽ mang lại lợi nhuận.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
// Function to return the maximum profit
int maximizeProfit(int n, int a, int b, int x, int y){
   int profit=0;
   for(int i=1;i<=n;i++){
      if(i%a==0 && i%b==0){
         int maxx=x>=y?x:y;
         profit+=maxx;
      }
      else if(i%a==0){
         profit+=x;
      }
      else if(i%b==0){
         profit+=y;
      }
   }
   return profit;
}
int main(){
   int N = 6, A = 2, B =4, X = 6, Y = 3;
   cout <<"Maximized profit is: "<<maximizeProfit(N,A,B,X,Y);
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Maximized profit is: 2