今天看到《啊哈算法》小猫钓鱼这个题感觉挺有意思的,用Java写了一下(思路一样,写了两种,一个自定义类,另一个是直接导入的队列和栈,建议对队列和栈不熟悉的同学先看看自定义的,这也是Java比之C的一个弊端,现成的东西太多,反而学起来不好理解)
题目要求:
两人比赛,A,B,每人最开始分得6张手牌,手牌大小为从1到9
A先出牌,B后出牌,若出牌在桌面上存在,在出牌人获得两张相同牌中间的所有牌(包括两张相同牌),放入出牌人手中。
最后谁手中无牌判为负

思路:
每人有两种操作,分别是出牌和赢牌。这恰好对应队列的两个操作,出牌就是出队,赢牌就是入队。而桌子就是一个栈,每打出一张牌放到桌上就相当于入栈。当有人赢牌的时候,依次将牌从桌上 拿走,这就相当于出栈。
赢牌的规则是:如果某人打出的牌与桌上的某张牌相同,即可将两张牌以及中间所夹的牌全部取走。因为牌面为1-9,可以建一个数组初始化为0,当牌面n出现在桌子上后数组【n】=1(类似桶排序)
需要两个队列、一个栈来模拟整个游戏

代码_自定义:


import java.util.Scanner;class queue{int[] data=new int[1000];int head,tail;
}
class stack{int[] data=new int[10];int top;
}
public class 小猫钓鱼 {public static void main(String[] args) {Scanner input=new Scanner(System.in);queue ha=new queue();queue heng=new queue();stack table=new stack();ha.head=0;ha.tail=0;heng.head=0;heng.tail=0;table.top=0;int tmp;int[] book=new int[10];//记录牌的重复,类似桶排序for (int i = 0; i < book.length; i++) {book[i]=0;}for (int i = 0; i < 6; i++) {ha.data[ha.tail]=input.nextInt();ha.tail++;}for (int i = 0; i < 6; i++) {heng.data[heng.tail]=input.nextInt();heng.tail++;}while (ha.head<ha.tail&&heng.head<heng.tail) {tmp = heng.data[heng.head];//小哼打出第一张牌放入临时变量if (book[tmp] == 0) {//桌子上没有等于t的牌,小哼没能赢牌heng.head++;//去掉第一张牌table.data[++table.top] = tmp;//放到桌子上(入栈)book[tmp] = 1;} else {heng.head++;heng.data[heng.tail] = tmp;heng.tail++;while (table.data[table.top] != tmp) {//一直拿牌到与打出的牌相等的那个book[table.data[table.top]] = 0;heng.data[heng.tail] = table.data[table.top];heng.tail++;table.top--;}}tmp = ha.data[ha.head];//小哈打出第一张牌放入临时变量if (book[tmp] == 0) {//桌子上没有等于t的牌,小哼没能赢牌ha.head++;//去掉第一张牌table.data[++table.top] = tmp;//放到桌子上(入栈)book[tmp] = 1;} else {ha.head++;ha.data[ha.tail] = tmp;ha.tail++;while (table.data[table.top] != tmp) {//一直拿牌到与打出的牌相等的那个book[table.data[table.top]] = 0;ha.data[ha.tail] = table.data[table.top];ha.tail++;table.top--;}}}if (ha.head==ha.tail){System.out.println("小哈输了,小哼的牌为:");for (int i = heng.head; i < heng.tail; i++) {System.out.print(heng.data[i]+" ");}System.out.println();System.out.println("桌子上的牌为:");if (table.top>0) {for (int i=1;i<=table.top;i++)System.out.print(table.data[i] + " ");}elseSystem.out.println("桌上没牌了");}else {System.out.println("小哈赢了");}}
}

代码_调用:


import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;public class 小猫钓鱼 {public static void main(String[] args) {Stack<Integer> deskStack = new Stack<>();//桌子上的牌,用栈进行管理Queue<Integer> playerA = new LinkedList();//用队列管理每个选手的牌Queue<Integer> playerB = new LinkedList();int book[] = new int[10];Scanner scanner = new Scanner(System.in);//发牌,每人6张for (int i = 0; i < 6; i++) {playerA.add(scanner.nextInt());}for (int i = 0; i < 6; i++) {playerB.add(scanner.nextInt());}//当两个队列都不为空,表示游戏没有结束while (!playerA.isEmpty() && !playerB.isEmpty()) {int ta = playerA.peek();//A出一张牌//判断A出的牌能不能赢牌if (book[ta] == 0) {//桌子上没有这张牌//A不能赢牌playerA.remove();//打出的牌出队列deskStack.add(ta);//打出的牌入栈book[ta] = 1;//标记打出的牌出现在桌子上} else {//A能赢牌playerA.remove();//打出的牌出队列playerA.add(ta);//打出的牌入队列while (deskStack.lastElement() != ta) {book[deskStack.lastElement()] = 0;playerA.add(deskStack.lastElement());deskStack.pop();}}int tb = playerB.peek();//B出一张牌//判断B出的牌能不能赢牌if (book[tb] == 0) {//桌子上没有这张牌//B不能赢牌playerB.remove();//打出的牌出队列deskStack.add(tb);//打出的牌入栈book[tb] = 1;//标记打出的牌出现在桌子上} else {//B能赢牌playerB.remove();//打出的牌出队列playerB.add(tb);//打出的牌入队列while (deskStack.lastElement() != tb) {book[deskStack.lastElement()] = 0;playerB.add(deskStack.lastElement());deskStack.pop();}}}if (playerA.isEmpty()) {System.out.println("B赢了");System.out.print("B手中的牌为:");while (!playerB.isEmpty()) {System.out.print(playerB.peek() + " ");playerB.remove();}} else {System.out.println("A赢了");System.out.print("A手中的牌为:");while (!playerA.isEmpty()) {System.out.print(playerA.peek() + " ");playerA.remove();}}System.out.println("");System.out.print("桌子上的牌为:");while (!deskStack.isEmpty()) {System.out.print(deskStack.lastElement() + " ");deskStack.pop();}}
}

以上

《啊哈算法》_小猫钓鱼(Java实现版)相关推荐

  1. 6种java垃圾回收算法_学习java垃圾回收

    垃圾回收(GC)一直是Java受欢迎背后的重要特性之一.垃圾回收是Java中用于释放未使用的内存的机制.本质上,它追踪所有仍在使用的对象,并将剩下的标记为垃圾.Java的垃圾回收被认为是一种自动内存管 ...

  2. java web聊天室论文_基于Java网页版聊天室的设计与实现毕业论文含开题报告及文献综述(样例3)...

    <基于Java网页版聊天室的设计与实现毕业论文含开题报告及文献综述.doc>由会员分享,可免费在线阅读全文,更多与<基于Java网页版聊天室的设计与实现毕业论文含开题报告及文献综述& ...

  3. java web聊天室论文_基于java网页版聊天室的设计与实现毕业论文含开题报告及文献综述.doc...

    基于java网页版聊天室的设计与实现毕业论文含开题报告及文献综述.doc 还剩 52页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价 ...

  4. java web聊天室论文_基于Java网页版聊天室的设计与实现毕业论文含开报告及文献综述.doc...

    基于Java网页版聊天室的设计与实现毕业论文含开报告及文献综述 本科生毕业论文(设计) 题 目: 基于Java网页版聊天室的设计与实现 姓 名:学 院: 理学院 专 业: 信息与计算科学 班 级: 信 ...

  5. java 哈希算法_选择Java密码算法第1部分-哈希

    java 哈希算法 抽象 这是涵盖Java加密算法的三部分博客系列文章的第1部分. 该系列涵盖如何实现以下功能: 使用SHA–512散列 使用AES–256的单密钥对称加密 使用RSA–4096的公钥 ...

  6. java矩阵连乘算法_使用java写的矩阵乘法实例(Strassen算法)

    Strassen算法于1969年由德国数学家Strassen提出,该方法引入七个中间变量,每个中间变量都只需要进行一次乘法运算.而朴素算法却需要进行8次乘法运算. 原理 Strassen算法的原理如下 ...

  7. java python算法_用Java,Python和C ++示例解释的搜索算法

    java python算法 什么是搜索算法? (What is a Search Algorithm?) This kind of algorithm looks at the problem of ...

  8. java 离散算法_用JAVA语言实现离散数学算法

    用JAVA语言实现离散数学算法 用JAVA语言实现离散数学算法 * 显示离散数学算法的真值表 * 提供将一个中缀合适公式的真值表输出到某一PrintStream流中的功能 * 以单个大写字母表示变量( ...

  9. java连连看算法_用 JAVA 开发游戏连连看(之三)将算法与界面结合起来

    (之三)将算法与界面结合起来 用布局和按钮来实现算法的界面 上面已经说完了算法,相信大家也迫不及待的想进入界面的设计了吧,好了,多的不说,我们开始吧. 既然我们的算法是基于二维数组的,那么我们也应该在 ...

  10. java编写字母z算法_【Java】【每日算法/刷穿 LeetCode】6. Z 字形变换(中等)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]6. Z 字形变换(中等) 宫水三叶发布于 今天 12:03 题目描述 将一个给定字符串 s 根据给定的行数 numRows , ...

最新文章

  1. PingCode 3.0 发布,开启国产研发自动化时代
  2. 数字化时代,如何解决企业协同办公的问题?
  3. 孙立岩 python-basic: 用于学习python基础的课件(五六七八九十)
  4. IE8不能正常登录网上银行的解决方法
  5. DOS批处理高级教程精选(七)
  6. 佳能2020转印带拆卸图解_RF人文街拍小钢炮 佳能RF35mm F1.8 MACRO IS STM
  7. FFmpeg编译出错_img_convert 找不到
  8. PgSQL · 案例分享 · PostgreSQL+HybridDB解决企业TP+AP混合需求
  9. LeetCode 513. 找树左下角的值 思考分析
  10. Spring Boot2 整合 MyBatis 多数据源
  11. .NET轻量级任务管理类
  12. 将MfgTool工具改造为自己的烧写工具
  13. c++语言将任意进制转化10进制,C++ 基础编程之十进制转换为任意进制及操作符重载...
  14. spring学习--基于注解方式创建对象AOP
  15. oracle怎么同步时间设置,【oracle数据库获取当前时间】
  16. 工业物联网实践指南----专注生产制造活动
  17. 在我笔记本Ubuntu上装普罗米修斯记录
  18. 自我实现的人的15种心理特征
  19. 深度参与 openGauss Developer Day 2022,云和恩墨在多项活动中展风采
  20. 针对python代码下载youtub视屏报错修复

热门文章

  1. 给虚拟机更换桌面壁纸和锁屏界面
  2. URAL 1533 Fat Hobbits
  3. 汽车悬架的半主动控制系统MATLAB/SIMULNK仿真
  4. oppo锁屏断网设置在哪里呀_怎么设置手机锁屏不断网
  5. C#实现回合制游戏模拟
  6. 借助脑机接口的即插即用控制,四肢瘫痪患者可以轻松控制电脑光标
  7. 计算机英文科技论文写作发表
  8. R语言如何绘制桑葚图(28)
  9. mtk android 11接打电话默认免提功能
  10. 考研辅助app的诞生!