C++ 程式碼檢查取水遊戲是否所有勝利者
假設我們有一個包含 n 個元素的陣列 A 和另一個數字 s。桌面上有一個空的取水杯和 n 個非空的取水杯。在一個遊戲中,有幾個玩家。每次移動,玩家都會取一個非空的取水杯並將水全部倒入大杯中。如果水滿溢位來,玩家就輸了。我們必須檢查他們是否都會成為勝利者(大杯不會滿溢)。如果一個水杯已經完全裝滿,下一個玩家將不會進行自己的移動。這裡 s 是空杯的容量,A[i] 是第 i 個水杯中存在的取水量。
因此,如果輸入像 A = [3, 1, 3]; s = 4,則輸出將為 True,因為在第一和第二個玩家操作之後,大杯會被裝滿。對於最後一個玩家,將不會進行此移動。
步驟
為了解決這個問題,我們將執行以下步驟 −
k := 0 n := size of A sort the array A for initialize i := 0, when i < n - 1, update (increase i by 1), do: k := k + A[i] if k > s, then: return false Otherwise return true
示例
讓我們看看以下實現以獲得更好的理解 −
#include <bits/stdc++.h> using namespace std; bool solve(vector<int> A, int s){ int k = 0; int n = A.size(); sort(A.begin(), A.end()); for (int i = 0; i < n - 1; i++) k += A[i]; if (k > s) return false; else return true; } int main(){ vector<int> A = { 3, 1, 3 }; int s = 4; cout << solve(A, s) << endl; }
輸入
{ 3, 1, 3 }, 4
輸出
1
廣告