C++程序:寻找卡牌游戏赢家
假设我们有一个数字n,两个大小分别为k1和k2的数组A和B。Amal和Bimal正在玩一个有趣的卡牌游戏。共有n张牌,编号从1到n。最初这些牌在他们之间分配。游戏进行如下:每一轮,每个玩家取一张自己的牌(任意一张)放在桌子上,这样另一个玩家看不到他们选择了哪张牌。然后,两张牌都显示出来,牌数较大的玩家将两张牌都拿到手中。每张牌可以玩任意次数。A代表Amal玩的牌,B代表Bimal玩的牌。如果玩家没有牌,则输掉游戏。我们必须找到最终的赢家。
所以,如果输入类似于n = 5;A = [3, 2];B = [5, 1, 4],则输出将是Bimal,因为最初他们玩的是(3, 5),Bimal拿走了所有牌,然后玩(3, 1) Amal拿走了两张牌,然后如果他们玩(3, 4) Bimal拿走了所有牌,然后如果Amal玩1,Bimal将用牌5拿走它们,所以Amal手中将没有牌。
步骤
为了解决这个问题,我们将遵循以下步骤:
d := 0 e := 0 for initialize i := 0, when i < size of A, update (increase i by 1), do: f := A[i] if d < f, then: d := f for initialize i := 0, when i < size of A, update (increase i by 1),do: f := A[i] if e < f, then: e := f if d > e, then: return "Amal" Otherwise return "Bimal"
示例
让我们看看下面的实现,以便更好地理解:
#include<bits/stdc++.h> using namespace std; string solve(int n, vector<int> A, vector<int> B){ int d = 0; int e = 0; for(int i = 0; i<A.size(); i++){ int f = A[i]; if (d < f) d = f; } for(int i = 0; i<A.size(); i++){ int f = A[i]; if(e < f) e = f; } if (d > e) return "Amal"; else return "Bimal"; } int main(){ int n = 5; vector<int> A = {3, 2}; vector<int> B = {5, 1, 4}; cout << solve(n, A, B) << endl; }
输入
5, {3, 2}, {5, 1, 4}
输出
Bimal
广告