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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP