您好,欢迎访问一九零五行业门户网

在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可以被a和b整除,但为了最大化利润,它被b整除而不是a。
下面程序中使用的方法如下 -我们有6个整数变量,包括正数范围(num),p1表示第一个人,p2表示第二个人,profit_p1表示第一个人的利润(即如果给定的数字范围中的数字可以被p1整除,则profit_p1增加),以及类似的profit_p2。
在main函数中调用了一个方法(profitmaximisation),该方法是所有计算的实用方法。
在函数内部可以看到,只有当数字是p1或p2的最小公倍数的倍数时,它才能被p1和p2同时整除。此外,它应该被能够提供更多利润的数字除以。
因此,这里的计算方法是profit_p1 * (num / p1) + profit_p2 * (num / p2) - min(profit_p1, profit_p2) * (num / lcm(p1, p2))。
引入了一个方法calculategcd()来计算给定数字的最小公倍数。
最终的输出在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("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
以上就是在java中,最大化所有人x的总利润的详细内容。
其它类似信息

推荐信息