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

更新於: 30-Mar-2022

201 個瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告