用 Java 实现所有人 X 的总利润最大化

javaserver side programmingprogramming

我们给定 5 个整数变量 Num、P1、P2、profit_P1、profit_P2,任务是最大化 [1,Num] 范围内所有自然数的利润。这里的方法是,如果一个正数可以被 P1 整除,则利润增加 profits_P1,同样,如果范围内的数字可以被 P2 整除,则 profits_P2 的利润率会增加。此外,正整数的利润最多可以添加一次。

让我们通过示例来理解:-

输入 − int num = 4, P1 = 6, P2 = 2, profits_P1 = 8, profits_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, profits_P1 = 3, profits_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 类似于第 1 个人的利润(即,如果第 1 个人中的数字给定的数字范围可以被 P1 整除(profit_P1 上升),类似地,profit_P2 也可以。

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

  • 在函数中可以看到,只有当数字是 P1 或 P2 的最小公倍数的倍数时,每个数字才能被 P1 和 P2 整除。此外,它还应除以产生更多利润的数字。

  • 所以这里是通过 profit_P1 * (num / P1) + profits_P2 * (num / P2) – 来计算的。 min(profit_P1, profits_P2) * (num / lcm(P1, P2))

  • 引入了 CalculateGcd() 方法来计算给定数字的 lcm。

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

示例

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

相关文章