在 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.