今天无聊和妹妹一起玩了一会小猫钓鱼,随后有感就写了一下简单的用c语言实现的小猫钓鱼,接下来就进入正题吧。

小猫钓鱼的过程简单来说,就是每一轮先有一个人出牌,出完牌后检查是否桌子牌面上有相同数值的牌,有则将两张相同数值的牌及其二者之间的牌全部收入囊中,无则这张牌将保留在桌面上,随后轮到另外一人出牌,检查牌面情况,操作同第一人。如此重复每轮过程直到有人没有牌了被淘汰。

分析问题,我们可以发现两个人手上的牌可以用队列来实现,先进先出,出牌即出队,收牌则入队,而桌面上的牌可以用栈来实现,先进后出。大致框架已经有了,那如何实现出牌收牌呢,我们需要一个标志来判断出的牌是否和某张桌面上的牌有相同数值,这个flag我们可以用book数组来实现,因为去掉大小王总共13张牌,那么我们将数组大小设置为14(因为没有0),开始初始化为0,每次打入一张牌就将对应数组下标设置为1,那么每次检查就可以通过数组对应下标的数值来判断了。

接下来就是代码实现。

#include <stdio.h>
#include <stdlib.h>struct queue{int data[100];int head;int tail;
};struct stack{int data[100];int top;
};int main()
{struct queue q1,q2;struct stack s1;int t;int book[14];q1.head=q1.tail=1;q2.head=q2.tail=1;s1.top=0;//每个人多少张牌int n;scanf("%d",&n);// 初始化两个人手上的牌for(int i=1;i<=n;i++){scanf("%d",&q1.data[q1.tail]);q1.tail++;}for(int i=1;i<=n;i++){scanf("%d",&q2.data[q2.tail]);q2.tail++;}for(int i=1;i<14;i++){book[i]=0;}while(q1.head<q1.tail && q2.head<q2.tail)//有牌就出牌{//第一个人出牌t=q1.data[q1.head];//没有相同数值的牌if(book[t]==0){s1.top++;s1.data[s1.top]=t;q1.head++;book[t]=1;}//有相同数值的牌else{q1.head++;q1.data[q1.tail]=t;q1.tail++;while(s1.data[s1.top]!=t){book[s1.data[s1.top]]=0;q1.data[q1.tail]=s1.data[s1.top];s1.top--;q1.tail++;}}//轮到第二个人出牌了t=q2.data[q2.head];if(book[t]==0){s1.top++;s1.data[s1.top]=t;q2.head++;book[t]=1;}else{q2.head++;q2.data[q2.tail]=t;q2.tail++;while(s1.data[s1.top]!=t){book[s1.data[s1.top]]=0;q2.data[q2.tail]=s1.data[s1.top];s1.top--;q2.tail++;}}}// 赢了if(q1.head==q1.tail){printf("q2获胜\n");printf("q2手上的牌有\n");for(int i=q2.head;i<q2.tail;i++){printf("%d ",q2.data[i]);}printf("\n");if(s1.top>0){printf("桌上还有这些牌\n");for(int i=1;i<=s1.top;i++){printf("%d ",s1.data[i]);}}elseprintf("桌上没牌了");}if(q2.head==q2.tail){printf("q1获胜\n");printf("q1手上的牌有\n");for(int i=q1.head;i<q1.tail;i++){printf("%d ",q1.data[i]);}printf("\n");if(s1.top>0){printf("桌上还有这些牌\n");for(int i=1;i<=s1.top;i++){printf("%d ",s1.data[i]);}}elseprintf("桌上没牌了");}getchar();getchar();//吃回车用的return 0;
}

简单c语言实现小猫钓鱼相关推荐

  1. python简单编程-编程中最简单的语言Python,这样学或许更容易

    最近微信小程序上面出了一个跳一跳的小游戏 大家有没有玩呀? 编程中最简单的语言Python,这样学或许更容易 分享之前我还是要推荐下我自己建的Python开发学习群:628979297,群里都是学Py ...

  2. 用简单的语言描述C++ 是什么?

    用简单的语言描述C++ 是什么? 答:C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛.C++支持多种编程范式 --面向对象编程.泛型编程和过程化编程. 其编程领域众广,常用于系统开发,引 ...

  3. 不谈高级原理,只用简单的语言来聊聊机器学习

    不谈高级原理,只用简单的语言来聊聊机器学习 ✨博主介绍

  4. 最简单的python语言程序设计_编程中最简单的语言Python,这样学或许更容易

    最近微信小程序上面出了一个跳一跳的小游戏 大家有没有玩呀? 编程中最简单的语言Python,这样学或许更容易 分享之前我还是要推荐下我自己建的Python开发学习群:628979297,群里都是学Py ...

  5. c语言编译器下载 天天,简单C语言编译器(编译原理)

    简单C语言编译器(编译原理) (26页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 #include#include#include# ...

  6. 202314读书笔记|《孩子们的诗》——简单的语言,击中每个人心中的诗意

    202314读书笔记|<孩子们的诗>--简单的语言,击中每个人心中的诗意 <孩子们的诗>作者果麦.这本书中的诗都是孩子们写的,虽然他们或许并不认为自己写的是诗.每个人都想一直做 ...

  7. 描述常见的计算机硬件系统的构成,用简单的语言描述计算机硬件系统构成

    用简单的语言描述计算机硬件系统构成 用简单的语言描述计算机硬件系统构成 一.计算机硬件系统概述 所谓计算机硬件系统,就是指构成计算机看得见的,摸得着的实际物理设备. 常见的计算机硬件组成主要由下图各部 ...

  8. 简单c语言实现三子棋/多子棋

    简单c语言实现三子棋/多子棋主要是想实现以下几个功能 (先做再循环)do while 一.目录: 1.play 0.exit 二.选择:(Switch)选择 三.进行游戏: 1.储存数据 - 二维数组 ...

  9. 通过Visual C++进行简单C语言函数的反汇编操作

    学习目标: 通过Visual C++进行简单C语言函数的反汇编操作 学习内容: 1. 使用VC进行反汇编操作 2. 进行反汇编分析 学习过程: 1. 使用VC进行反汇编操作 编写简单函数,进行操作. ...

最新文章

  1. queue java 判断重复值_java集合类深入分析之Queue篇(Q,DQ)
  2. Arthas watch 命令使用指南
  3. 用Windows Live Writer离线写博客
  4. C语言结构体指针的使用方法
  5. 使用jdk DOM,SAX和第三方jar包DOM4J创建,解析xml文件
  6. 《掌握需求过程》——阅读笔记05
  7. 8、周期性任务、find、break和continue 学习笔记
  8. 25个优秀的UI设计资源下载
  9. iptables转发基础
  10. hash通信(python多线程应用)采用md5加密
  11. 错排公式的推导及应用
  12. NYOJ题目252-01串(动态规划)
  13. 精简版XP安装IIS
  14. Premiere 添加字幕
  15. 哎 !互联网又偷偷进行了裁员
  16. 登录公司邮箱服务器怎么选,企业邮箱怎么选
  17. git中ssh keys配置
  18. 贵有恒,何必三更眠五更起;最无益,莫过一日暴十日寒。
  19. 电力英语及计算机成绩查询入口官网,考试成绩查询入口
  20. Firefox浏览器的安装及插件使用

热门文章

  1. java实现 蓝桥杯 算法训练 操作格子
  2. 数学--计算几何--三角定位原理和升级
  3. Layui treeGrid
  4. 套接字的连接(服务器与客户端一对一的连接)
  5. 字节跳动社招全岗位研发面经(已拿offer)
  6. JAVA定时任务的创建方式
  7. 2023年全国最新工会考试精选真题及答案46
  8. 女神节快乐 | 用编程语言解密京东云程序媛!
  9. 记录下如何用vue实现PC端网易云轮播图效果
  10. 计算机网络实验:CISCO IOS 路由器基本配置