從三個堆中選擇最多石子的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
廣告
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP