用 Java 实现所有人 X 的总利润最大化
我们给定 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