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
广告