java实现纸牌游戏之小猫钓鱼算法

 更新时间:2020年04月24日 16:32:00   作者:蝴蝶Maple  
这篇文章主要为大家详细介绍了java实现纸牌游戏之小猫钓鱼算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏——“小猫钓鱼”。游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。

假如游戏开始时,小哼手中有 6 张牌,顺序为 2 4 1 2 5 6,小哈手中也有 6 张牌,顺序为 3 1 3 5 6 4,最终谁会获胜呢?现在你可以拿出纸牌来试一试。接下来请你写一个程序来自动判断谁将获胜。这里我们做一个约定,小哼和小哈手中牌的牌面只有 1~9。 

输入

2 4 1 2 5 6
3 1 3 5 6 4

输出

小哼win
小哼当前手中的牌是 5 6 2 3 1 4 6 5 桌上的牌是 2 1 3 4

这道题目完全考察栈跟队列的应用,桌面上的牌是栈,个人手中的牌是队列。

附上JAVA实现的源码:

import java.util.LinkedList;
import java.util.Scanner;
import java.util.Stack;
 
public class Main {
 public static void main(String[] args) {
 Scanner scanner = new Scanner(System.in);
 LinkedList<Integer> a = new LinkedList<Integer>();//A手中的牌
 LinkedList<Integer> b = new LinkedList<Integer>();//B手中的牌
 Stack<Integer> stack = new Stack<>();//记录桌面上的牌
 int[] book = new int[10];//用来标记哪些牌已经在桌上
 int n,t,s;
 for(int i = 0; i < 10; i++){
 book[i] = 0;
 }
 System.out.println("输入手中牌的个数");
 n = scanner.nextInt();
 System.out.println("输入A君手中牌的大小");
 for(int i = 1; i<=n; i++){
 a.addLast(scanner.nextInt());
 }
 System.out.println("输入B君手中牌的大小");
 for(int i = 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 (Integer x : 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 (Integer x : stack) { 
 System.out.print(x + " "); 
  } 
 } else {
 System.out.println("桌面没有牌了");
 }
 }
 return;//结束
 }
}

结果:

输入手中牌的个数
6
输入A君手中牌的大小
2 4 1 2 5 6
输入B君手中牌的大小
3 1 3 5 6 4
输入完毕开始游戏
A君胜利!A手中的牌是
5 6 2 3 1 4 6 5
桌面上的牌是
2 1 3 4

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring自动配置之condition条件判断下篇

    Spring自动配置之condition条件判断下篇

    这篇文章主要为大家介绍了SpringBoot condition条件判断功能的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 在SpringBoot中如何利用Redis实现互斥锁

    在SpringBoot中如何利用Redis实现互斥锁

    当我们利用Redis存储热点数据时,突然就过期失效或者被删除了,导致大量请求同时访问数据库,增加了数据库的负载,为减轻数据库的负载我们利用互斥锁,本文重点介绍在SpringBoot中如何利用Redis实现互斥锁,感兴趣的朋友一起看看吧
    2023-09-09
  • SpringMVC中Invalid bound statement (not found)常见报错问题解决

    SpringMVC中Invalid bound statement (not f

    本文主要介绍了SpringMVC中Invalid bound statement (not found)常见报错问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • IDEA 包转模块的解决步骤

    IDEA 包转模块的解决步骤

    很多朋友遇到这样一个问题,直接在idea拉取代码,发现创建的模块包类型不一样了,类似这样的问题该如何处理呢?很多朋友向小编求助,在这统一回答大家,需要的朋友参考下本文吧
    2021-06-06
  • Java基础题新手练习(三)

    Java基础题新手练习(三)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • Java的NIO与IO的详解及对比

    Java的NIO与IO的详解及对比

    这篇文章主要介绍了Java的NIO与IO的详解及对比的相关资料,需要的朋友可以参考下
    2017-03-03
  • Okhttp在SpringBoot中的应用实战记录(太强了)

    Okhttp在SpringBoot中的应用实战记录(太强了)

    这篇文章主要给大家介绍了关于Okhttp在SpringBoot中应用实战的相关资料,在Spring Boot中使用OkHttp主要是为了发送HTTP请求和处理响应,OkHttp是一个高效、易用的HTTP客户端库,它具有简洁的API和强大的功能,需要的朋友可以参考下
    2023-12-12
  • maven之packaging标签的使用

    maven之packaging标签的使用

    这篇文章主要介绍了maven之packaging标签的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Object类toString()和equals()方法使用解析

    Object类toString()和equals()方法使用解析

    这篇文章主要介绍了Object类toString()和equals()方法使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • ConcurrentHashMap线程安全及实现原理实例解析

    ConcurrentHashMap线程安全及实现原理实例解析

    这篇文章主要介绍了ConcurrentHashMap线程安全及实现原理实例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论