在 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