#P2589. Snap
Snap
中文题面:
描述
Snap是一款双人卡牌游戏。牌堆包含若干种类型的牌。初始时,每位玩家持有牌堆的一半,顺序随机,面朝下叠成一摞,并按从顶到底的顺序依次打出,将每张牌正面朝上放入另一摞。当面朝下的牌堆用尽时,将正面朝上的牌堆翻转作为新的面朝下牌堆,继续游戏。
两名玩家同时且同步地打出各自的牌。即,双方会在同一时刻各放置一张正面朝上的牌。若同时出现的两张牌类型相同,则双方均需喊出“Snap!”,率先喊出的玩家将拿走对方当前所有正面朝上的牌,并将其置于自己牌堆的顶部。
游戏持续进行,直至某位玩家获得所有牌。该玩家即为胜者。
你的任务是模拟一场Snap游戏,判断游戏是否会在轮内结束;若结束,则确定胜者。
输入:
每种牌由单个字母或数字表示。输入的第一行为Jane的初始牌堆(从顶到底的顺序),第二行为John的初始牌堆。Jane和John初始持有的牌数相同,且不超过张。
输出:
当需要喊“Snap!”时,通过以下方式判定谁先喊出:
C/C++:
Pascal:
若结果为,则Jane先喊;否则John先喊。 每当Jane先喊时,输出“Snap! for Jane: ”后接Jane当前正面朝上的牌堆(从顶到底顺序);John先喊时同理。若游戏结束,输出“Jane wins.”或“John wins.”。若双方各打出张牌后仍未分出胜负,则输出“Keeps going and going ...”
输入数据 1
ABCDA
CBADC
输出数据 1
Snap! for Jane: BCBA
Snap! for Jane: DADCBCBA
Snap! for John: CBAC
Snap! for John: ADADCBAC
John wins.
来源
2000年1月29日加拿大滑铁卢大学编程比赛