可在C中分两步提取的最大金额

我们给了我们两个储物柜,分别是L1和L2,它们有一些硬币形式的钱。L1中有A个硬币,L2中有B个硬币。我们必须从储物柜中取出钱或硬币,以使取出的钱最大。每次从任何储物柜中取出硬币时,都会用比以前少1的硬币来代替。如果从L1提取A硬币,则将其替换为A-1硬币;如果从L2提取B硬币,则其将替换为B-1硬币。任务是分两步使提取的金额最大化。这意味着硬币只能被提取两次。

输入-L1-10,L2-11

输出-可以分两步提取的最大金额-21

说明-在步骤1中,我们从L2提取11硬币,L2将被11-1 = 10个硬币替代。

在步骤2中,L1和L2都有10个硬币,因此可以从任何一个中提取,我们有11 + 10 = 21最大硬币。

输入-L1-5,L2-5

输出-可以分两步提取的最大金额-10

说明-在步骤1中,我们从L1提取5个硬币,L1将被5-1 = 4个硬币替换。

在步骤2中,L1拥有4个硬币,L2拥有5个硬币,因此我们从L2取得5个硬币,并且我们有5 + 5 = 10个最大硬币。

以下程序中使用的方法如下

  • 我们有两个带有一些硬币的储物柜L1和L2,它们是整数。

  • 函数maxMoney(int A,int B)将储物柜中的硬币数量作为输入。

  • 在内部,maxMoney()我们使用变量“ money”来存储最大金额。

  • 最初,金钱从A或B中取更大的值。(金钱= A> B?A:B)

  • 将货币值与A或B进行比较,以检查提取了哪个集装箱的硬币。

  • 现在,用比以前少一个的容器替换该容器。(A--或B--)

  • 同样,金钱会增加A或B中的值,以较高者为准。(金钱+ = A> B?A:B)

    如果k较小,则最小的k个元素的总和最小-

  • 在D1中存储abs((整个数组的总和)-(2 *至少k个元素的总和))。两次是因为数组和也具有这些元素。

    如果k较大,则最大的k个元素的总和最高-

  • 在D2中存储abs((整个数组的总和)-(2 *最高k个元素的总和))。两次是因为数组和也具有这些元素。

  • 比较D1与D2并将最大值存储在maxD中。

  • 返回maxD作为结果。

示例

Code:
#include <stdio.h>
#include <math.h>
//函数返回我们可以得到的最大硬币
int maxMoney(int A, int B){
   //拿硬币
   int money=A>B?A:B;
   //向储物柜中再装入1枚硬币
   if(money==A)
      A--;
   else
      B--;
   //再次退出
   money+=A>B?A:B;
   return money;
}
//驱动程式码
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