C++24点扑克牌游戏含源码.docx
- 文档编号:29860529
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:17
- 大小:143.44KB
C++24点扑克牌游戏含源码.docx
《C++24点扑克牌游戏含源码.docx》由会员分享,可在线阅读,更多相关《C++24点扑克牌游戏含源码.docx(17页珍藏版)》请在冰豆网上搜索。
C++24点扑克牌游戏含源码
一、实验设计方案
1、实验内容与目的(简单介绍实验内容,说明实验目的)
实验目的:
实现扑克牌游戏:
对于任意的四个1到13的整数(四张扑克牌),求能算出24的表达式;运算符有()+-*/;若无解则输出相应的信息。
实验内容:
你的具体选择(要详细)
文件输入(input.txt)输出(output.txt),输出全部结果;
——————————————————————————————————————
2、实验准备工作(阐述解决问题所涉及的算法思想,至少要画一个算法流程图来说明)
本次实验相当于,给出四个数字,要求,在其间添加运算符和括号,使得计算结果等于24。
括号的放置即为决定哪几个数先进行计算。
所以,我们先确定首先进行计算的两个相邻的数,计算完成后,就相当于剩下三个数字,仍需要在它们之间添加符号;然后再决定在这三个数中哪两个相邻的数先计算。
由此,我们就成功解决了数字的运算次序问题,此时不需要再考虑不同运算符号的优先级问题,因为括号的优先级高于加减乘除。
通过循环,我们可以得到第一第二第三次计算的运算符,再通过计算,就可以得出和,若和等于24,即为所求解。
在输出格式中,由于括号的放置共六种情况,故根据计算先后顺序的不同,输出时在不同地方放置括号;
以下为循环计算的流程图:
表示循环获取;
表示计算数值
以下为计算函数的流程图:
——————————————————————————————————————
二、实验步骤、测试与结果分析
1、源程序的设计(在此附上源程序(cpp文件)清单)
#include
#include
#include
usingnamespacestd;
charsign[4]={'+','-','*','/'};
//定义一个全局变量,用于储存加减乘除符号,方便下面符号判断
classgame24point
//24点纸牌游戏类
{
private:
doublea[4];
//为实现精确计算,防止计算结果为小数却被强制转换为整数,采用double变量
public:
game24point();
//构造函数
doublecalcute(double,double,char);
//计算函数,给出一个符号两个有顺序的数,计算结果
voidsearch();
//搜索函数,用于寻找合适的解
voidprint();
//打印得到的四张纸牌的数值
};
game24point:
:
game24point()
{
charch[4];
//由于纸牌中除了数字还有AJQK等字符,故使用字符数组
ifstreaminfile("input.txt");
if(!
infile)
//若打开失败
{
cout<<"打开文件input.txt失败!
"< exit (1); } for(inti=0;i<4;i++)infile>>ch[i]; //在input文件中读取数据 cout<<"##########################################"< cout<<"####"< cout<<"##正在从input.txt中读取数据##"< cout<<"####"< cout<<"##########################################"< for(i=0;i<4;i++) { if(ch[i]=='A')a[i]=10; elseif(ch[i]=='J')a[i]=11; elseif(ch[i]=='Q')a[i]=12; elseif(ch[i]=='K')a[i]=13; elseif(ch[i]=='1')a[i]=1; elseif(ch[i]=='2')a[i]=2; elseif(ch[i]=='3')a[i]=3; elseif(ch[i]=='4')a[i]=4; elseif(ch[i]=='5')a[i]=5; elseif(ch[i]=='6')a[i]=6; elseif(ch[i]=='7')a[i]=7; elseif(ch[i]=='8')a[i]=8; elseif(ch[i]=='9')a[i]=9; else { cout<<"第"< "< exit (1); } } //纸牌字符转换为数值 infile.close(); } doublegame24point: : calcute(doublea,doubleb,charindex) { if(index=='+')returna+b; //若为+,则返回相应结果 elseif(index=='-')returna-b; elseif(index=='*')returna*b; elseif(index=='/')if(b! =0)returna/b; //只有当分母不为0时,返回结果 } voidgame24point: : search() { doubletemp[3],tem[2]; //第一个符号放置后,经过计算后相当于剩下三个数,这个数组用于存储这三个数 doublesum; //求得的和 intjudge=0; //判断是否找到一个合理的解 ofstreamoutfile("output.txt",ios: : app); //以输出的方式打开文件 if(! outfile) //若文件打开失败 { cout<<"打开文件output.txt失败"< exit (1); } cout<<"##########################################"< cout<<"####"< cout<<"##正在计算结果,请等待##"< cout<<"####"< cout<<"##########################################"< outfile<<"======================================================================="< outfile<<"##########################################"< outfile<<"####"< outfile<<"##本次24点游戏求得结果如下##"< outfile<<"####"< outfile<<"##########################################"< for(inti=0;i<4;i++) //第一次放置的符号 { for(intj=0;j<4;j++) //第二次放置的符号 { for(intk=0;k<4;k++) //第三次放置的符号 { for(intm=0;m<3;m++) //首先计算的两个相邻数字,共有3种情况,相当于括号的作用 { if(a[m+1]==0&&sign[i]=='/')break; temp[m]=calcute(a[m],a[m+1],sign[i]); temp[(m+1)%3]=a[(m+2)%4]; temp[(m+2)%3]=a[(m+3)%4]; //先确定首先计算的两个数字,计算完成相当于剩下三个数,按顺序储存在temp数组中 for(intn=0;n<2;n++) //三个数字选出先计算的两个相邻数字,两种情况,相当于第二个括号 { if(temp[n+1]==0&&sign[j]=='/')break; tem[n]=calcute(temp[n],temp[n+1],sign[j]); tem[(n+1)%2]=temp[(n+2)%3]; //先确定首先计算的两个数字,计算完成相当于剩下两个数,按顺序储存在temp数组中 if(tem[1]==0&&sign[k]=='/')break; sum=calcute(tem[0],tem[1],sign[k]); //计算和 if(sum==24) //若和为24 { judge=1; //判断符为1,表示已求得解 if(m==0&&n==0) outfile<<"(("< elseif(m==0&&n==1) outfile<<"("< elseif(m==1&&n==0) outfile<<"("< elseif(m==1&&n==1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 24 扑克牌 游戏 源码