在Java中最大化所有人员X的总利润


我们有5个整数变量Num、P1、P2、profit_P1和profit_P2,任务是在[1,Num]范围内所有自然数中最大化利润。方法是:如果一个正数能被P1整除,利润增加profit_P1;如果该数能被P2整除,利润增加profit_P2。此外,一个正整数的利润最多只能加一次。

让我们用例子来理解:

输入− int num = 4, P1 = 6, P2 = 2, profit_P1 = 8, profit_P2 = 2;

输出− 最大化所有人员X的总利润 4

解释−这里我们有从1到4([1,Num(4)])的数字

序列中没有数字能被P1整除

1和2能被P2整除

1和2能被P2整除,获得2*2=4的利润

输入− num = 3, P1 = 1, P2 = 2, profit_P1 = 3, profit_P2 = 4

输出− 最大化所有人员X的总利润 10

解释− 1、2和3都能被A整除。

2是给定范围内唯一能被B整除的数。

2能被A和B整除。

1和3能被A整除,获得2 * 3 = 6的利润

2能被B整除,获得1 * 4 = 4的利润

2能被两者整除,但为了最大化利润,它被B而不是A整除。

下面程序中使用的方法如下:

  • 我们得到了6个整数变量,包括正数范围(Num)、表示第一个人P1、表示第二个人P2、表示第一个人利润的profit_P1(即,如果给定数范围内的数字能被P1整除,profit_P1增加),以及类似的profit_P2。

  • 在主函数中调用了一个方法(profitMaximisation),它是所有计算的实用方法。

  • 在函数内部可以看到,每个都能被P1和P2整除的数字,只有当该数字是P1或P2的最小公倍数的倍数时才成立。并且它应该除以能产生更多利润的数字。

  • 因此,这里通过profit_P1 * (num / P1) + profit_P2 * (num / P2) – min(profit_P1, profit_P2) * (num / lcm(P1, P2))计算。

  • 引入了一个CalculateGcd()方法来计算给定数字的最小公倍数。

  • 最终输出在主方法中捕获并显示给用户。

示例

public class testClass{
   static int CalculateGcd(int n1, int n2){
      if (n2 == 0)
         return n1;
      return CalculateGcd(n2, n1 % n2);
   }
   static int profitMaximisation(int n, int a, int b, int x, int y){
      int result = x * (n / a);
      result += y * (n / b);
      result -= Math.min(x, y) * (n / ((a * b) / CalculateGcd(a, b)));
      return result;
   }
   public static void main(String[] args){
      int num = 6, P1 = 6, P2 = 2, profit_P1 = 8, profit_P2 = 2;
      System.out.println("Maximize the total profit of all the persons X "+profitMaximisation(num, P1, P2, profit_P1, profit_P2));
   }
}

输出

如果运行以上代码,将生成以下输出

Maximize the total profit of all the persons X 12

更新于:2021年11月5日

289 次查看

开启您的职业生涯

完成课程后获得认证

开始
广告