在 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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP