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 个浏览

开启您的 职业生涯

通过完成课程获得认证

开始
广告