数据结构:“小猫钓鱼游戏”

一:题目

栈和队列的综合应用:“小猫钓鱼”的游戏规则是:将一副扑克牌平均分成两份,每人拿一份。玩家甲先拿出手中的第一张扑克牌放在桌上,然后玩家乙也拿出手中的第一张扑克牌,并放在玩家甲刚打出的扑克牌的上面,就像这样两个玩家交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一个人手中的牌全部出完时,游戏结束,对手获胜。

要求编写程序来模拟这场游戏,并判断出谁最后获胜,获胜的同时打印出获胜者手中的牌以及桌上可能剩余的牌。(应用性设计内容)

为了简化实现,先做这样一个约定,玩家甲和乙手中牌的牌面值只有1-9。

测试样例(测试样例均采用输入前规定当前发牌数量的方式)

序号

输入

输出

1

请输入发牌数:6

玩家甲:2 4 1 2 5 6

玩家乙:3 1 3 5 6 4

游戏结束:玩家乙赢

玩家乙手中牌为:6 5 2 3 4 1

桌面上还有牌为:3 4 5 6 2 1

2

请输入发牌数:8

玩家甲:5 4 1 3 7 9 6 2

玩家乙:6 2 4 8 5 7 1 3

游戏结束:玩家乙赢

玩家乙手中牌为:4  1  2  4  5  7  8  3  6  5

桌面上还有牌为:9  7  6  1  2  3

3

请输入发牌数:9

玩家甲:3 4 5 6 2 1 8 7 9

玩家乙:6 5 2 3 4 1 9 7 8

游戏结束:玩家甲赢

玩家乙手中牌为:2  1  6  3  4  2  9  8  9  5  6  3  7  5

桌面上还有牌为:1  4  8  7

二:思想

1.玩家手中的牌可看成队列,桌上牌看成栈。

2.判断是否和桌上牌某张相同时,可用遍历,或设个buff数组,用下标代表牌,值代表在不在

 1代表在,0代表不在。如buff【1】=1,表示牌面为1的牌已经存在,需相关操作。

3.其他就是出栈入栈出队入队

三:代码

new可替换malloc delete替代free

#include<iostream>
using namespace std;
int buff[10] = { 0 };typedef int  QElemType;
typedef struct QNode
{QElemType data;struct QNode* next;
}QNode, * QueuePtr;
typedef struct
{QueuePtr front;QueuePtr rear;
}LinkQueue;
void initQueue(LinkQueue& q)
{q.front = new QNode;q.front->next = nullptr;q.rear = q.front;}
void pushQueue(LinkQueue& q, QElemType x)
{QueuePtr p = new QNode;p->data = x;p->next = nullptr;q.rear->next = p;q.rear = p;}
void popQueue(LinkQueue& q, QElemType& e)
{e = 0;QueuePtr p;if (q.rear == q.front) {return;}p = q.front->next;e = p->data;q.front->next = p->next;if (p == q.rear)q.rear = q.front;delete p;}
bool emptyQueue(LinkQueue& q)
{return q.front == q.rear;
}
QElemType gettopQueue(LinkQueue& q)
{if (emptyQueue(q)) {return -1;}else return  q.front->next->data;
}
void clearQueue(LinkQueue& q)
{while (q.front->next){QueuePtr p = q.front->next;q.front->next = p->next;delete p;}q.rear = q.front;
}
void destroyQueue(LinkQueue& q)
{while (q.front){q.rear = q.front->next;delete q.front;q.front = q.rear;}
}
void displayQueue(LinkQueue& q)
{if (emptyQueue(q)) {  return; }QueuePtr  p = q.front->next;while (p){cout << p->data; cout << " ";p = p->next;}
}
/// <summary>
/// /
/// </summary>typedef int SElemType;
#define minsize 100
typedef struct
{SElemType* base;SElemType* top;int stacksize;
}SqStack;
void initStack(SqStack& s)
{s.base = new SElemType[minsize];s.top = s.base;s.stacksize = minsize;
}
void pushStack(SqStack& s, SElemType x)
{if (s.top - s.base == s.stacksize) {SElemType* tmp = new SElemType[100];int i = 0;while (s.base != s.top) {tmp[i] = *s.top; i++;s.top++;}s.base = tmp;}*s.top = x;s.top++;
}
bool emptyStack(SqStack& s)
{return s.base == s.top;
}
void popStack(SqStack& s, SElemType& e)
{if (emptyStack(s)) {return;}e = *(s.top - 1);s.top--;}
void gettopStack(SqStack& s, SElemType& e)
{if (emptyStack(s)) {return;}e = *(s.top - 1);}
void clearStack(SqStack& s)
{SElemType e;while (!emptyStack(s)){popStack(s, e);}
}
void destroyStack(SqStack& s)
{delete[] s.base;s.base = s.top = nullptr;s.stacksize = 0;
}
void displayStack(SqStack S)
//输出顺序栈S中所有元素的值,顺序为从栈底到栈顶
{SElemType* p;if (S.base == S.top)               //如果栈空{printf("The Stack is NULL\n");return;}for (p = S.base; p < S.top; p++)cout << *p;cout << endl;}
void add(LinkQueue& q,SqStack& s,int e)
{pushQueue(q, e);int f;while (1){gettopStack(s, f);if (f == e) { pushQueue(q, e); popStack(s, f); buff[f] = 0; break; }pushQueue(q, f); popStack(s, f); buff[f] = 0;}
}
int main()
{LinkQueue q1, q2; initQueue(q1); initQueue(q2);cout << "请输入发牌数:";int n; cin >> n; int i = 0, j = 0,k=0;cout << "请给玩家甲发牌:";while (i != n){QueuePtr p = new QNode;cin >> p->data;pushQueue(q1, p->data); i++;}cout << "请给玩家乙发牌:";while (j != n){QueuePtr p = new QNode;cin >> p->data;pushQueue(q2, p->data); j++;}cout << "游戏开始:" << endl;cout << "玩家甲手里的牌为" << endl;displayQueue(q1); cout  << endl;cout << "玩家乙手里的牌为" << endl;displayQueue(q2); cout << endl;SqStack s;initStack(s);int e, f;while (k != n){if (emptyQueue(q1) || emptyQueue(q2)) break;popQueue(q1, e);if (buff[e] == 1) { add(q1, s, e); }else { buff[e] = 1; pushStack(s, e); }popQueue(q2, f);if (buff[f] == 1) { add(q2, s, f); }else {buff[f] = 1; pushStack(s, f);}}if (emptyQueue(q1)){cout << "游戏结束:玩家乙赢" << endl;cout << "玩家乙手里的牌为:"; displayQueue(q2);cout << "桌面上还有牌为:"; displayStack(s);}else{cout << "游戏结束:玩家甲赢" << endl;cout << "玩家甲手里的牌为:"; displayQueue(q1);cout << "桌面上还有牌为:"; displayStack(s);}return 0;
}

四:运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/458472.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端算法:树(力扣144、94、145、100、104题)

目录 一、树&#xff08;Tree&#xff09; 1.介绍 2.特点 3.基本术语 4.种类 二、树之操作 1.遍历 前序遍历&#xff08;Pre-order Traversal&#xff09;&#xff1a;访问根节点 -> 遍历左子树 -> 遍历右子树。 中序遍历&#xff08;In-order Traversal&#xf…

STM32L476芯片在KEIL环境下BOOT跳转APP注意事项

BOOT工程 分配BOOT程序地址、设置参数地址、APP程序地址、下载缓冲区地址 #define BOOT_SECTOR_ADDR 0x08000000 #define BOOT_SECTOR_SIZE 0x0000A000 #define SETTING_SECTOR_ADDR 0x0800A000 #define SETTING_SECTOR_SIZE 0x00002000 #define APP_S…

R语言 | paletteer包:拥有2100多个调色板!

看到 PMID:39024031 文章的代码中&#xff0c;有颜色设置的语句&#xff1a; pal <- paletteer_d("ggsci::category20_d3")[c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18)]DimPlot(MM,reduction umap,group.by "sample",label F,pt.size 0.1,c…

从零开始机器学习——基于PyTorch构建你的第一个线性回归模型

随着人工智能技术的迅猛发展&#xff0c;机器学习成为了现代科技领域中最炙手可热的话题之一。然而&#xff0c;对于初学者来说&#xff0c;机器学习似乎总是充满了复杂的理论和难以理解的概念。本文将带你从零开始&#xff0c;使用PyTorch深度学习框架&#xff0c;构建一个最简…

【设计模式系列】代理模式(八)

一、什么是代理模式 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它为其他对象提供一种代理以控制对这个对象的访问。代理模式在不直接访问实际对象的情况下&#xff0c;提供了对目标对象的间接访问。通过引入一个代理对象来间接操作实际对…

layui扩展组件之----右键菜单

源码&#xff1a;rightmenu.js layui.define([element], function (exports) {let element layui.element;const $ layui.jquery;let MOD_NAME rightmenu;let RIGHTMENUMOD function () {this.v 1.0.0;this.author raowenjing;};String.prototype.format function () {…

检索引擎Elasticsearch

一.为什么要用Elasticsearch 由于我们在运行我们的项目的时候通常都是将数据存到mysql或者sql serve等数据库中&#xff0c;在进行数据搜索时使用sql 语句 like进行模糊匹配查询&#xff0c;其一&#xff1a;虽然可以查到数据&#xff0c;但是它模糊匹配查询速度较慢&#xff0…

世优科技“AI+空间计算”推动消费行业向智能化升级

人工智能的演进正从初期的技术探索阶段&#xff0c;转向技术应用阶段&#xff0c;在此趋势下&#xff0c;融合了多模态大模型、虚拟现实、空间计算等前沿技术的人工智能应用新方向&#xff0c;展现出了巨大的潜力和商业价值。 10月19日&#xff0c;2024北京朝阳国际灯光节全新…

[C++11] 右值引⽤与移动语义

文章目录 左值和右值左值&#xff08;Lvalue&#xff09;右值&#xff08;Rvalue&#xff09;区别 左值引⽤和右值引⽤左值引用&#xff08;Lvalue Reference&#xff09;右值引用&#xff08;Rvalue Reference&#xff09;右值引用的特点 右值引用延长生命周期右值引⽤和移动语…

数据结构——树、二叉树和森林间的转换

前言 介绍 &#x1f343;数据结构专区&#xff1a;数据结构 参考 该部分知识参考于《数据结构&#xff08;C语言版 第2版&#xff09;》129~130页 &#x1f308;每一个清晨&#xff0c;都是世界对你说的最温柔的早安&#xff1a;ૢ(≧▽≦)و✨ 目录 前言 1、基础知识 2…

Matlab 车牌识别技术

1.1设计内容及要求&#xff1a; 课题研究的主要内容是对数码相机拍摄的车牌&#xff0c;进行基于数字图像处理技术的车牌定位技术和车牌字符分割技术的研究与开发&#xff0c;涉及到图像预处理、车牌定位、倾斜校正、字符分割等方面的知识,总流程图如图1-1所示。 图1-1系统总…

《手写Spring渐进式源码实践》实践笔记(第十一章 AOP-基于JDK、Cglib实现对象动态代理)

文章目录 第十一章 基于JDK、Cglib实现对象动态代理背景目标设计实现代码结构类图代理案例解析案例代码运行结果拆解案例 实现步骤 测试事先准备自定义拦截方法测试用例测试结果&#xff1a; 总结 第十一章 基于JDK、Cglib实现对象动态代理 背景 到本章节我们将要从 IOC 的实现…

今日头条APP移动手机端留痕脚本

这两个的脚本目的是什么呢&#xff1f; 很简单&#xff0c;就是批量访问指定用户的首页&#xff0c;在他人访客记录里面留下你的账户信息&#xff0c;可以让对方访问你的头条&#xff0c;概率下会关注你的头条&#xff0c;目的嘛&#xff0c;这个自己细想&#xff01; 第1个是…

网页上的视频怎么下载下来?三种方法

分享三个简单好用的网页视频下载工具&#xff0c;值得使用&#xff01; 1.IDM IDM 是一款可以提高下载速度达5倍的工具&#xff0c;同时具有恢复、调度和组织下载的功能。如果由于网络问题或意外的电源中断&#xff0c;程序将恢复未完成的下载。 IDM 还具有一个完全功能的站点…

张驰咨询:六西格玛培训费用,到底值不值得花?

六西格玛作为一种先进的管理理念和统计方法&#xff0c;已经在全球范围内得到了广泛的应用和认可。它旨在通过减少流程变异&#xff0c;提高产品质量和客户满意度&#xff0c;从而为企业带来持续的改进和盈利增长。随着六西格玛理念的普及&#xff0c;越来越多的人和企业开始寻…

spark on kubernetes运行测试

测试环境 ● kubernetes 1.20.15 ● default命名空间 ● spark 3.1.2 ● kubectl 运行架构 构建镜像 配置JAVA_HOME下载spark二进制包spark-3.1.2-bin-hadoop3.2.tgz并解压修改kubernetes/dockerfiles/spark/Dockerfile文件 ARG java_image_tag11-jre-slimFROM openjdk:${j…

HBuilder X 中Vue.js基础使用2(三)

一、条件渲染 1、条件判断 v-if &#xff1a; 表达式返回真值时才被渲染 v-else &#xff1a;表达式返回为假时不被渲染 2、 分支条件判断 v-else-if &#xff1a;使用v-if , v-else-if 和 v-else 来表示其他的条件分支 3、显示隐藏 v-show v-show true 把节点显示 …

持续深化信创布局,途普科技与统信软件完成产品兼容性互认证

近日&#xff0c;由北京途普科技有限公司&#xff08;以下简称“途普科技”&#xff09;自主研发的TopGraph图数据库及知识图谱构建平台已成功完成统信服务器操作系统V20的兼容性互认证&#xff0c;标志着途普科技在国产自控技术上又迈出了坚实的一步。 在各项严格的测试环节中…

技术成神之路:设计模式(二十一)外观模式

相关文章&#xff1a;技术成神之路&#xff1a;二十三种设计模式(导航页) 介绍 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它为子系统中的一组接口提供一个统一的接口。外观模式定义了一个高层接口&#xff0c;使得子系统更容易使用。 …

XJ02、消费金融|消费金融业务模式中的主要主体

根据所持有牌照类型的不同,消费金融服务供给方主要分为商业银行、汽车金融公司、消费金融公司和小贷公司,不同类型机构定位不同、提供消费金融服务与产品类型也各不相同。此外,互联网金融平台也成为中国消费金融业务最重要的参与方之一,虽其并非持牌金融机构,但借助其流量…