题意翻译
题目描述
Alice,Bob和Charlie在玩 Card Game for Three
- 开始时,每名玩家有一叠由卡牌组成的牌堆。每张牌上有一个字母 a,b或c。 卡牌的顺序不能被改变。
- Alice先开始
- 玩家的牌堆中至少有一张牌,当前玩家从牌堆顶抽出一张牌,这张牌代表的玩家进行下一回合(a->alice,b->bob,c->charlie)
- 如果当前玩家的牌堆空了,游戏结束,这名玩家胜利
你得到了每名玩家最初的牌堆,字符串S a,S b,S c。从左往右抽牌(牌堆顶在左边)。
一道有3个坑的模拟题
第一个坑:这个游戏的第一轮不是3个人都来,而是Alice来
我以为三个人都来,辛辛苦苦开了个map
第二个坑:竟然是谁空了谁嬴(可能只有我才错)
我以为最先空的那个人的最后一张牌上面的人才嬴,害的我用了个toupper函数
第三个坑:打牌不都是谁出完了谁嬴吗?这里竟然是---我出完了还要再等到我出牌时才能嬴???
好了,不说这些心酸事了,上代码:
#include<bits/stdc++.h>
using namespace std;
string str[4];
int heada,headb,headc,len[4];//a,b,c的牌顶和a,b,c的长度
char who;//谁在出牌
int main() {
for(int i=1; i<=3; i++) cin>>str[i],len[i]=str[i].size();
who='a';//最开始是a出牌
while(1) {
if(who=='a') {//到我出牌了(我等到花儿都谢了)
if(heada==len[1]) {//我没牌了(记得第三个坑,是len[1],不是len[1]-1)
cout<<'A'<<endl;//嬴喽
return 0;
}
who=str[1][heada++];//下一个人出牌(过)
}
if(who=='b') {
if(headb==len[2]) {
cout<<'B'<<endl;
return 0;
}
who=str[2][headb++];
}
if(who=='c') {
if(headc==len[3]) {
cout<<'C'<<endl;
return 0;
}
who=str[3][headc++];
}
}
}