在C中,可以通过两个步骤最多提取的金额

在c中,可以通过两个步骤最多提取的金额

我们有两个储物柜,称为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 #include // Function to return the maximum coins we can getint 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 codeint 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中,可以通过两个步骤最多提取的金额的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1445616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 22:40:58
下一篇 2025年12月16日 16:16:15

发表回复

登录后才能评论
关注微信