首頁  >  文章  >  後端開發  >  在C中,可以透過兩個步驟最多提取的金額

在C中,可以透過兩個步驟最多提取的金額

WBOY
WBOY轉載
2023-09-22 08:05:171346瀏覽

在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

以上是在C中,可以透過兩個步驟最多提取的金額的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除