在 Java 中最大化所有人 X 的总利润
我们给出了5个整数变量Num、P1、P2、利润_P1、利润_P2,任务是从[1,Num]范围内的所有自然数中最大化利润。这里的方法是,如果正数可以被P1整除,则利润增加了利润_P1,同样,如果范围内的数字可以被P2整除,则利润_P2的利润率会增加。此外,正整数的利润最多可以添加一次。
让我们用例子来理解:-
输入 -intnum=4,P1=6,P2=2,利润_P1=8,利润_P2=2;
产出 −使所有人的总利润最大化X4
说明- 这里我们的数字范围从1到4([1,Num(4)])
数列中没有一个数能被P1整除
1和2可以被P2整除
1和2被P2整除得到2*2=4的利润
输入 −num=3,P1=1,P2=2,利润_P1=3,利润_P2=4
输出 -使所有人的总利润最大化X10
解释 -1、2和3可被A整除。
2是给定范围内唯一能被B整除的数。
2可以被A和B整除。
1和3可以除以A得到2*3=6的利润
2可以除以B得到1*4=4的利润
2可以被两者整除,但为了最大化利润,它被B而不是A整除。
以下程序中使用的方法如下-
我们得到了6个整数变量,其中包括正数range(Num),P1描述第一个人,P2描述第二个人,利润_P1类似于个人1的利润(即如果给定数字范围内的数字可以被P1整除利润_P1上升),同样的利润_P2。
在main函数内部,一个方法是called(profitMaximisation)所有计算的实用方法。
在函数内部,可以看到每个可以被P1和P2整除的数字,只有当这个数字是P1的LCM的倍数时,或者P2.Also它应该被除以带来更多利润的数字。
所以这里的计算公式为:利润_P1*(num/P1)+利润_P2*(数目/P2)–min(利润_P1,利润_P2)*(数目/lcm(P1,P2))。
介绍CalculateGcd()了一种计算给定数字的lcm的方法。
最终输出在main方法中捕获并作为输出显示给用户。
示例
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("使所有人X的总利润最大化 "+profitMaximisation(num, P1, P2, profit_P1, profit_P2)); } }输出结果
如果我们运行上面的代码,它将生成以下输出
使所有人X的总利润最大化 12