在 C++ 中最大化利潤,當除以兩個數字時具有關聯的利潤


我們給出五個整數 **N、A、B、X** 和 **Y**。目標是透過檢查範圍 [1 到 N] 內的數字來最大化利潤,如果

  • 一個數字可以被 A 整除,則利潤增加 **X**。

  • 一個數字可以被 B 整除,則利潤增加 **Y**。

對於特定範圍內的數字,利潤只能增加一次。

讓我們透過示例來理解。

**輸入** - N=4,A=2,B=3,X=2,Y=3

**輸出** - 最大化利潤為 - 7

**解釋** -

2、4 可以被 A (2) 整除。利潤從 0 增加到 2,然後從 2 增加到 4(透過 X=2)

3 可以被 B (3) 整除。利潤從 4 增加到 7。(透過 Y=3)

**輸入** - N=5,A=2,B=4,X=1,Y=3

**輸出** - 最大化利潤為:4

**解釋** -

2、4 可以被 A (2) 整除。

4 也可以被 B (4) 整除。

對於 2,利潤從 0 增加到 1(透過 X)。對於 4,我們選擇被 B 整除。所以利潤增加 Y 而不是 X,因為 Y 更多。所以它從 1 增加到 4(透過 Y=3)。

下面程式中使用的演算法如下

  • 我們有整數 N、A、B、X、Y。

  • 函式 maximizeProfit(int n, int a, int b, int x, int y) 計算利潤並返回該值。它將所有變數作為引數並返回最大化利潤。

  • 變數 profit 將包含一定量的利潤,初始值為 0。

  • 從 1 到 n 開始,使用 for 迴圈檢查 i 能否被 a 和 b 整除

  • 如果 i 可以被 a 和 b 整除,則將利潤增加 x 或 y,取較大者。

  • 否則,如果 i 只能被 a 整除,則將利潤增加 x

  • 否則,如果 i 只能被 b 整除,則將利潤增加 y

  • 最後返回 profit 中的值作為結果。

示例

 線上演示

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

輸出

如果我們執行以上程式碼,它將生成以下輸出 -

Maximized profit is: 2

更新於: 2020-08-29

86 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.