從三個堆中選擇最多石子的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
廣告