C24点扑克牌游戏(含源码)

一、实验设计方案1、实验内容与目的(简单介绍实验内容,说明实验目的)实验目的:实现扑克牌游戏:对于任意的四个1到13的整数(四张扑克牌),求能算出24的表达式;运算符有()+-*/;若无解则输出相应的信息。实验内容:你的具体选择(要详细)文件输入(input.txt)输出(output.txt),输出全部结果;——————————————————————————————————————2、实验准备工作(阐述解决问题所涉及的算法思想,至少要画一个算法流程图来说明)本次实验相当于,给出四个数字,要求,在其间添加运算符和括号,使得计算结果等于24。括号的放置即为决定哪几个数先进行计算。所以,我们先确定首先进行计算的两个相邻的数,计算完成后,就相当于剩下三个数字,仍需要在它们之间添加符号;然后再决定在这三个数中哪两个相邻的数先计算。由此,我们就成功解决了数字的运算次序问题,此时不需要再考虑不同运算符号的优先级问题,因为括号的优先级高于加减乘除。通过循环,我们可以得到第一第二第三次计算的运算符,再通过计算,就可以得出和,若和等于24,即为所求解。在输出格式中,由于括号的放置共六种情况,故根据计算先后顺序的不同,输出时在不同地方放置括号;以下为循环计算的流程图:表示循环获取;表示计算数值以下为计算函数的流程图:第一个数字第二个数字第三个数字第四个数字第二个数字第一个数字第二个数字第三个数字第一个数字选择先行计算的两个相邻数选择先行计算的两个相邻数第一个符号第二个符号第三个符号和——————————————————————————————————————二、实验步骤、测试与结果分析1、源程序的设计(在此附上源程序(cpp文件)清单)#include<iostream>#include<fstream>#include<cmath>usingnamespacestd;charsign[4]={'+','-','*','/'};//定义一个全局变量,用于储存加减乘除符号,方便下面符号判断classgame24point//24点纸牌游戏类{private:doublea[4];//为实现精确计算,防止计算结果为小数却被强制转换为整数,采用double变量public:game24point();//构造函数doublecalcute(double,double,char);//计算函数,给出一个符号两个有顺序的数,计算结果voidsearch();数字2数字1符号数字1数字2结果+或-或*/若数字2不为0返回结果//搜索函数,用于寻找合适的解voidprint();//打印得到的四张纸牌的数值};game24point::game24point(){charch[4];//由于纸牌中除了数字还有AJQK等字符,故使用字符数组ifstreaminfile("input.txt");if(!infile)//若打开失败{cout<<"打开文件input.txt失败!"<<endl;exit(1);}for(inti=0;i<4;i++)infile>>ch[i];//在input文件中读取数据cout<<"##########################################"<<endl;cout<<"####"<<endl;cout<<"##正在从input.txt中读取数据##"<<endl;cout<<"####"<<endl;cout<<"##########################################"<<endl;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<<"第"<<i+1<<"个数据输入有误!"<<endl;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失败"<<endl;exit...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?