java实现纸牌游戏之小猫钓鱼算法
星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏——“小猫钓鱼”。游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。
假如游戏开始时,小哼手中有6张牌,顺序为241256,小哈手中也有6张牌,顺序为313564,最终谁会获胜呢?现在你可以拿出纸牌来试一试。接下来请你写一个程序来自动判断谁将获胜。这里我们做一个约定,小哼和小哈手中牌的牌面只有1~9。
输入
241256
313564
输出
小哼win
小哼当前手中的牌是56231465桌上的牌是2134
这道题目完全考察栈跟队列的应用,桌面上的牌是栈,个人手中的牌是队列。
附上JAVA实现的源码:
importjava.util.LinkedList;
importjava.util.Scanner;
importjava.util.Stack;
publicclassMain{
publicstaticvoidmain(String[]args){
Scannerscanner=newScanner(System.in);
LinkedLista=newLinkedList();//A手中的牌
LinkedListb=newLinkedList();//B手中的牌
Stackstack=newStack<>();//记录桌面上的牌
int[]book=newint[10];//用来标记哪些牌已经在桌上
intn,t,s;
for(inti=0;i<10;i++){
book[i]=0;
}
System.out.println("输入手中牌的个数");
n=scanner.nextInt();
System.out.println("输入A君手中牌的大小");
for(inti=1;i<=n;i++){
a.addLast(scanner.nextInt());
}
System.out.println("输入B君手中牌的大小");
for(inti=1;i<=n;i++){
b.addLast(scanner.nextInt());
}
System.out.println("输入完毕开始游戏");
while(!a.isEmpty()&&!b.isEmpty()){//当有人手中没牌游戏结束
t=a.removeFirst();
if(book[t]==0){//A没有赢
stack.push(t);//桌面上加一张牌
book[t]=1;//记录桌面上已经有这张牌了
}else{//A赢了
a.addLast(t);//将打出的牌到到末尾
while(!stack.peek().equals(t)){//将桌面上的牌按顺序放到A的末尾
s=stack.pop();
a.addLast(s);
book[s]=0;
}
}
//同上B取出牌
t=b.removeFirst();
if(book[t]==0){
stack.push(t);
book[t]=1;
}else{
b.addLast(t);
while(!stack.peek().equals(t)){
s=stack.pop();
b.addLast(s);
book[s]=0;
}
}
}
if(!a.isEmpty()){//A胜利
System.out.println("A君胜利!A手中的牌是");
while(!a.isEmpty()){
System.out.print(a.removeFirst()+"");
}
System.out.println();
if(!stack.isEmpty()){//桌面上有牌
System.out.println("桌面上的牌是");
for(Integerx:stack){
System.out.print(x+"");
}
}else{
System.out.println("桌面没有牌了");
}
}else{//B胜利
System.out.println("B君胜利!B手中的牌是");
while(!b.isEmpty()){
System.out.print(b.removeFirst()+"");
}
System.out.println();
if(!stack.isEmpty()){//桌面上有牌
System.out.println("桌面上的牌是");
for(Integerx:stack){
System.out.print(x+"");
}
}else{
System.out.println("桌面没有牌了");
}
}
return;//结束
}
}
结果:
输入手中牌的个数
6
输入A君手中牌的大小
241256
输入B君手中牌的大小
313564
输入完毕开始游戏
A君胜利!A手中的牌是
56231465
桌面上的牌是
2134
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
热门推荐
10 上级生日祝福语 简短独特
11 生日祝福语 简短独特男童
12 物业小区高考祝福语简短
13 对部门师姐祝福语简短
14 精简祝福语简短小故事
15 别人的新年祝福语简短
16 谢谢同事英文祝福语简短
17 康复儿童六一祝福语简短
18 新年祝福语大全简短成语