卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章21330本站已运行3413

在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 <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
卓越飞翔博客
上一篇: PHP开发:如何实现文章阅读进度条和分享功能
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏