從三個堆中選擇最多石子的C++程式碼


假設我們有三個數字a、b和c。有三個石堆,分別有a、b和c個石子。每次我們可以執行以下操作:

  • 從第一個堆中取走一個石子,從第二個堆中取走兩個石子(當堆中有足夠的石子時)

  • 從第二個堆中取走一個石子,從第三個堆中取走兩個石子(當堆中有足夠的石子時)

我們必須計算最多可以收集多少石子?

因此,如果輸入為a = 3;b = 4;c = 5,則輸出為9,因為在兩次操作中,我們可以從第二個堆中取走兩個石子,從第三個堆中取走四個石子,總共得到6個石子,然後從第一個堆中取走一個,從第二個堆中取走兩個,再得到3個石子。

步驟

為了解決這個問題,我們將遵循以下步驟:

return (minimum of b and floor of (c / 2) + minimum of a and (b - minimum of b and floor of (c / 2)) / 2) * 3

示例

讓我們來看下面的實現以更好地理解:

#include <bits/stdc++.h>
using namespace std;
int solve(int a, int b, int c){
   return (min(b, c / 2) + min(a, (b - min(b, c / 2)) / 2)) * 3;
}
int main(){
   int a = 3;
   int b = 4;
   int c = 5;
   cout << solve(a, b, c) << endl;
}

輸入

3, 4, 5

輸出

9

更新於:2022年3月15日

131 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告