题目链接:
- 蓝桥杯练习系统 PREV-44
- 华东理工大学OJ - 1335
题目概括:
- 实际上原理类似于小时候玩的《丁钩钓鱼》游戏。
- 分为A和B两方,两人初始手牌不超过30张。
- 由A方先出牌,再由B方出牌。
- 玩家出牌后,若场上有相同点数的牌,则将相同点数牌及其中间的牌全部置入该玩家手牌牌底(题目说,为了方便,置入手牌的牌序与桌面的牌序相反)。
> 桌面: K321K
> 置入手牌: K123K
- 从桌面赢牌的一方,需继续出牌。
- 当某一方出完手上的最后一张牌,且无法从桌面获取牌时,则另一方胜利。
- 当无法有玩家获胜时,输出
-1
。
题目分析:
- 桌面上的牌后进先出可以使用堆栈来储存。
- 玩家的手牌先进先出可以使用队列来储存。
- 由于两位玩家初始手牌最多为30张,当多次循环后,无法有一方胜利,我们认为最大循环次数不超过10000次。当出牌10000次还是无法有玩家获胜,则认为是无解。
代码如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String a = in.next();
String b = in.next();
Stack<Character> desk = new Stack<Character>();
Queue<Character> playerA =