洛谷AT2066 [ABC045B] 3人でカードゲームイージー / Card Game for Three (ABC Edit)

传送门

题意翻译

题目描述

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++];
		}
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值