我们有两个储物柜,称为L1和L2,里面有一些硬币。L1有A个硬币,L2有B个硬币。我们必须从储物柜中取出硬币,使得取出的金额最大化。每次从任何一个储物柜中取出硬币时,都会用前一个数量减1个硬币替换。如果我们从L1中取出A个硬币,那么它将被A-1个硬币替换,如果我们从L2中取出B个硬币,那么它将被B-1个硬币替换。任务是在两个步骤中最大化取出的金额。这意味着硬币只能被取出两次。
输入 - L1 - 10,L2 - 11
输出 - 可以在两个步骤中取出的最大金额 - 21
解释 - 在第一步中,我们从L2中取出11个硬币,L2将被11-1=10个硬币替换。
在第二步中,L1和L2都有10个硬币,所以可以从任何一个中取出,我们有11+10=21个硬币,这是最大的。
输入 - L1-5,L2-5
输出 - 可以在两个步骤中取出的最大金额 - 10
解释 - 在第一步中,我们从L1中取出5个硬币,L1将被5-1=4个硬币替换。
在第二步中,L1有4个硬币,L2有5个硬币,所以我们从L2中取出5个硬币,我们有5+5=10个硬币,这是最大的。
我们有两个整数型储物柜L1和L2,其中有一些硬币。
函数maxMoney(int A, int B)以储物柜中的硬币数量作为输入。
在maxMoney()函数中,我们使用变量'money'来存储最大金额。
最初,money的值来自A或B中较大的一个。(money=A>B?A:B)
将money的值与A或B进行比较,以确定哪个容器的硬币被取出。
现在用前一个数量减1个硬币来替换该容器。(A--或B--)
再次将money的值加上A或B中较大的一个。(money+=A>B?A:B)
如果k较小,则最小的k个元素的和最小 -在D1中存储abs((整个数组的和) - (最小的k个元素的两倍和)). 两倍是因为数组和也包含了这些元素。
如果k较大,则最大的k个元素的和最大 -
在D2中存储abs((整个数组的和) - (最大的k个元素的两倍和)). 两倍是因为数组和也包含了这些元素。
将D1与D2进行比较,并将最大值存储在maxD中。
将maxD作为结果返回。
实时演示
Code: #include <stdio.h> #include <math.h> // Function to return the maximum coins we can get int maxMoney(int A, int B){ //take coins int money=A>B?A:B; //refill the lockers with 1 less no.of coins if(money==A) A--; else B--; //withdraw again money+=A>B?A:B; return money; } // Driver code int main(){ int L1 = 8, L2 = 9; printf("Maximum money that can be withdrawn in two steps: %d" , maxMoney(L1, L2)); return 0; }
如果我们运行上面的代码,它将生成以下输出−
Maximum money that can be withdrawn in two steps: 17
以上是在C中,可以通过两个步骤最多提取的金额的详细内容。更多信息请关注PHP中文网其他相关文章!