




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、实验设计方案1、实验内容与目的(简单介绍实验内容,说明实验目的)实验目的:实现扑克牌游戏:对于任意的四个1到13的整数(四张扑克牌),求能算出24的表达式;运算符有()+-*/;若无解则输出相应的信息。实验内容:你的具体选择(要详细)文件输入(input.txt )输出(output.txt) ,输出全部结果;2、实验准备工作(阐述解决问题所涉及的算法思想,至少要画一个算法流程图来说明)本次实验相当于,给出四个数字,要求,在其间添加运算符和括号,使得计算结果 等于24。括号的放置即为决定哪几个数先进行计算。所以,我们先确定首先进行计算的两个 相邻的数,计算完成后,就相当于剩下三个数字,仍需
2、要在它们之间添加符号;然后再 决定在这三个数中哪两个相邻的数先计算。由此,我们就成功解决了数字的运算次序问 题,此时不需要再考虑不同运算符号的优先级问题,因为括号的优先级高于加减乘除。通过循环,我们可以得到第一第二第三次计算的运算符,再通过计算,就可以得出 和,若和等于24 ,即为所求解。在输出格式中,由于括号的放置共六种情况,故根据计算先后顺序的不同,输出时 在不同地方放置括号;以下为循环计算的流程图:表示循环获取;I I表示计算数值以下为计算函数的流程图:二、实验步骤、测试与结果分析1、源程序的设计(在此附上源程序(cpp文件)活单)#include <iostream >#i
3、nclude <fstream >#include <cmath> using namespacestd;char sign4 ='+','-' ,'*' ,'/' ;/定义一个全局变量,用丁储存加减乘除符号,方便下面符号判断class game24point/24点纸牌游戏类(private :double a4;/为实现精确计算,防止计算结果为小数却被强制转换为整数,采用 double变量public :game24point();/构造函数 double calcute( double , doubl
4、e , char);/计算函数,给出一个符号两个有顺序的数,计算结果void search();/搜索函数,用于寻找合适的解void print();/打印得到的四张纸牌的数值;game24point: game24point()(char ch4;/由于纸牌中除了数字还有AJQIKf字符,故使用字符数组 ifstream infile( "input.txt" );if ( ! infile)/若打开失败(cout <<"打开文件 input.txt 失败! " <<endl;exit(1);for (int i =0;i &l
5、t;4;i +) infile >>chi;/在input文件中读取数据cout <<"ff ff ff ffff ff ffff ff ffff ff ff ffff ff ffff ff ffff ff ff ffff ff ffff ff ffff ff ff ffff ff ffff ff ffff ff 11 kTTTTTTTTTT,“ TF “ “ TFTF “ “ TF “ ” TrTrmTTr ” “ TF “ “ TrTrTFTT “ “TTTFTrTr “ “ “ 7T ff ff ff ff ff ff ff ff ff ff ff ff
6、 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff<<endl;cout <<"#"<<endl;cout <<"#正在从i nput.txt中读取数据#”<<endl;cout <<"#"<<endl;cout <<"kTTTTTTTTTT,“ TF “ “ TFTF “ “ TF “ ” TrTrmTTr ”
7、 “ TF “ “ TrTrTFTT “ “TTTFTrTr “ “ “ 7T ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff<<endl;for (i =0;i <4;i +) (if (chi=珈') ai=10;elseif(chi) ai=11;elseif(chi=组) ai=12;elseif(chi=*') ai=13;elseif(chi=日1
8、') ai=1;elseif(chi=日2') ai=2;elseif(chi2') ai=3;elseif(chi=“') ai=4;elseif(chi2') ai=5;elseif(chi=日6') ai=6;elseif(chi2') ai=7;elseif(chi2') ai=8;elseif(chi2') ai=9;else (cout<<"第"<<i+1<<"个数据输入有误!" <<endl; exit(1);/纸牌字符转
9、换为数值infile . close();double game24point : calcute( double a, double b, char index) if (index ='+' ) return a +b;若为+ ,则返回相应结果elseif(index='-')returna - b;elseif(index='*')returna * b;elseif(index='/')if (b !=0) returna/ b;/只有当分母不为0时,返回结果 void game24point : search()doub
10、le temp3,tem2;/第一个符号放置后,经过计算后相当于剩下三个数,这个数组用于存储这三个数 double sum;/求得的和int judge =0;/判断是否找到一个合理的解ofstream outfile( "output.txt" ,ios : app);/以输出的方式打开文件if ( ! outfile)/若文件打开失败cout <<"打开文件 output.txt失败"<<endl;exit(1);cout <<"ff ff ff ffff ff ffff ff ffff ff ff ff
11、ff ff ffff ff ffff ff ff ffff ff ffff ff ffff ff ff ffff ff ffff ff ffff ff 11 kTTTTTTTTTT,“ TF “ “ TFTF “ “ TF “ ” TrTrmTTr ” “ TF “ “ TrTrTFTT “ “TTTFTrTr “ “ “ 7T ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff<<e
12、ndl;cout <<"cout <<"#"#正在计算结果,请等待#"<<endl;<<endl;cout <<"cout <<"#"ff ffff ffff ff ffff ff ffff ffff ffff ff ffff ff ffff ffff ffff ff ffff ff ffff ffff ffff ff ffff ff ffff ff 11 kTTTTTTTTTT,“ TF “ “ TFTF “ “ TF “ ” TrTrmTTr ” “
13、 TF “ “ TrTrTFTT “ “TTTFTrTr “ “ “ 7T ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff<<endl;<<endl;outfile <<"= ="<<endl;outfile <v #" <<endl;outfile <<"#"<
14、;<endl;outfile<<"#本次24点游戏求得结果如下#"<<endl;outfile<<"#"<<endl;outfile<<"ff ffff ff ffff ff ffff ff ff ffff ff ffff ff ffff ff ff ffff ff ffff ff ffff ff ff ffff ff ffff ff ffff ff ff ffll kTTTTTT”“ TFTF “ “ TF “ “ TF “ “ TFTF “,7T7T7T7T7T7T7T7T7
15、T7T7T7T7T7T,“”ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff<<endl;for ( inti =0;i <4;i +)/第一次放置的符-(a pfor (int j =0;j <4;j +)/第二次放置的符号(for (int k =0;k <4;k +)/第三次放置的符号(for (int m=0;m<3;m+)/首先计算的两个相邻数字,共
16、有3种情况,相当于括号的作用(if (am+1 =0 &&signi ='/' ) break;tempm =calcute(am,am+1,signi);temp(m+1)%3 =a(m +2) %4;temp(m+2) %3 =a(m +3) %4;/先确定首先计算的两个数字,计算完成相当于剩下三个数,按顺序 储存在tem滋组中for (int n =0;n <2;n +)/三个数字选出先计算的两个相邻数字,两种情况,相当于第二个括号(if (tempn+1 =0 &&signj=7' ) break;temn =calcute
17、(tempn,tempn+1,signj);tem(n +1) %2 =temp(n +2) %3;/先确定首先计算的两个数字,计算完成相当于剩下两个数,按 顺序储存在temp数组中if (tem1 =0 &&signk =7' ) break;sum=calcute(tem0,tem1,signk);/计算和if (sum=24)/若和为24(judge =1;/判断符为1,表小已求得解if (m=0 &&n =0)outfile «(" <<a0 <<signi <<a1 <<&qu
18、ot;)" <<signj <<a2 «)" <<signk <<a3 <<"=" <<sum<<endl;else if (m=0 &&n =1)outfile <<"(" <<a0 <<signi<<a1 <<")" <<signk<<"(" <<a2 <<signj<&
19、lt;a3<<")=" <<sum<<endl;elseif (m=1 &&n=0)outfile <<"(" <<a0<<signj<<"(" <<a1 <<signi<<a2 <<")" <<signk<<a3<<"=" <<sun<<endl;elseif (m=1 &&
20、;n=1)outfile <<a0 <<signk <v(" <<a1 <<signi <<a2 <<")" <<signj <<a3 <<") ="<<sum<<endl;else if (m=2 &&n =0)outfile <V(" <<a0 <<signj <<a1 «)" <<signk <&l
21、t;'(" <<a2 <<signi <<a3 <<")=" <<sum<<endl;else if (m=2 &&n =0)outfile <<a0 <<signk <V(" <<a1 <<signj <<'(" <<a2 <<signi <<a3 «) ="<<sum<<endl;/m=0,1,
22、2 n=0,1表示六种括号放置可能,并按照这六种可能输出相应的格式的计算式if (judge =0) outfile<<”这四张扑克牌无法找到一个合理的解 "<<endl;/如果没有找到结果,符号位为0outfile <<"= ='<<endl;outfile <<endl <<endl;outfile . close();cout<<"计算完成,结果已保存在output.txt 文件中!” <<endl;void game24point : print()(c
23、out <<"读取成功!" <<endl;for (int i =0;i <4;i +)(coutw 第"<<i +1<<"张牌"<<ai <<endl; int main( void)(game24point obj;obj. print();cout <<endl;obj. search();cout <<endl;system( "PAUSE" return 0; 2、实验现象及结论(应用文字和程序运行的截图说明程序测
24、试现象,并解释结果)input.txt 截图input, txt 记事本文件是)编辑 格式迫)查看世)帮助QI)Exe执行文件截图H八学习C+111实验振告56. ezeUttItttIttt正在从input - txt中读取数据峭Itttffttttttnttitiiitttnnttflntttinitttnttttnitttaittttittttaitttnitttflnttttntt41010HHtttt正在计算结果,请等待ittt#ttttlt|V|算完成,结杲n保存在(mtput-txt文1牛币, ks按任意键继续.Output.txt 执行截图r output.文件编帽格式查看/帮
25、助也)本次找点游戏求得结果如下本次加点游戏求得结果如下O邮tttt这四张扑克牌无法找到一个合理的解input.txt输入截图如下:xnput R txt -记事本文件 编相 格式 查看世)帮助4646Ln 1, Col 1Jcsy.exe 执行截图如下:Frograa FilesCYu¥anbinwwteBp-exettfittttnttttnitttttttttnittttiitttttAttttitttttitttttttttttttttttititttttitttn ttuttit#tt 正在input.txt中读即数据 UH nnttiiPUPK 5- P1P1P1P3 Hi
26、 12 3 44646Uttttlt正在计算结果,请等待«#正在计算结果,请等待 tt«u»ttit计算完成,结集己榛寿走out putt Kt文律而请按任意键继续.output.txt输出截图如下:output, 1st - 记事本文件(X)编辑® 格式但)查看。帮助再)卜=ttttitlt«B本次点游戏求得结果如下#ttttittttt(4-们祟(够6) = 24input.txt输入截图如下:1 xnput,- txt -记事本文件 编相 格式 查看世)帮助A878Ln 1,jcsy.exe执行截图如下:亡土 B:Progra> F
27、ilesCYuYanbinwwteMp. exeitttittttttttttittttttiittttiiitttttttttttitti nit ttott nit ttnnttttntttiiifttt ttttun正在从input.七史中读职数据ttH正在从inputAxt中读职数据It#tinttti10878ttnttutt#正在计算结果,请等特 #»tmnittiflnitttnitttttttnnttttntttttittttflittittttttnintnuitiintttttttttttttttt计算完成,结果已保存在output-txt文件中,请按任意键继续. .Output.txt 输出截图如下:文件匿)编辑理)格式 查看世)帮助01)nit甘。本次2呻游戏求得结果如下»#本次2 4点游戏求得结果如下ttflttttit itC4-6)*C4+6)-24tttttttl址A本次2N点游戏求得结果如下ttttttttft#ottttttttttttttttnitttnititttitttttttitttttttttitftttottttitttttitttnititii(10*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 出国劳务派遣合同范例
- 2025年中国电解脱脂剂市场调查研究报告
- 买卖合同范例简要
- 2025年中国涡轮清洗润滑剂市场调查研究报告
- 企业订购员工蛋糕合同范例
- 2012购销合同范例
- 辽宁省辽阳市2024-2025学年高一上学期期末考试生物试卷(解析版)
- 刑事再审合同范例
- 仿木桩定做合同范例
- 358直签合同范例
- 高中通用技术人教高二下册目录新型抽纸盒-
- 畜牧场经营管理
- 课程思政示范课程申报书(测绘基础)
- ALeader 阿立得 ALD515使用手册
- 神华陕西国华锦界电厂三期工程环评报告
- 飞行员航空知识手册
- GB/Z 19848-2005液压元件从制造到安装达到和控制清洁度的指南
- GB/T 34936-2017光伏发电站汇流箱技术要求
- GB/T 12618.4-2006开口型平圆头抽芯铆钉51级
- 红金大气商务风领导欢迎会PPT通用模板
- 学前教育学00383-历年真题-试卷
评论
0/150
提交评论