我們有兩個儲物櫃,稱為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中文網其他相關文章!