当可除数为2的数字在C ++中具有关联的利润时,最大化利润

我们给出了5个整数N,A,B,Xÿ。目标是通过检查[1到N]范围内的数字之间是否存在来最大化利润。

  • 一个数字是由A整除,则通过利润增长X

  • 一个数字是由乙整除然后通过利润增长ÿ

对于范围内的特定数字,只能添加一次利润。

让我们通过示例来理解。

输入-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的增加,利润增加Y而不是X。因此它从1上升到4(按Y = 3)。

以下程序中使用的方法如下

  • 我们有整数N,A,B,X,Y。

  • 函数maximumProfit(int n,int a,int b,int x,int y)计算利润并返回值。它以所有变量为参数并返回最大利润。

  • 可变利润将有一定数量的利润,最初为0。

  • 从1到n,使用for循环检查i被a和b的除数

  • 如果i被a和b整除,则将利润增加x或y中的较大者。

  • 否则,如果我只能被我整除,则将利润增加x

  • 否则,如果我只能被b整除,则将y的利润增加

  • 最后,返回值以利润形式出现。

示例

#include <bits/stdc++.h>
using namespace std;
//函数返回最大利润
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
猜你喜欢