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

更新于:2022年3月15日

浏览量:555

开启你的职业生涯

完成课程获得认证

开始学习
广告