游戏24点课程设计报告
更新时间:2023-09-11 17:28:01 阅读量: 教育文库 文档下载
游戏24点课程设计报告
一.题目:
分析类:
计算24点:任意输入4位数字,利用+,-,*,/四则运算使之得到结果 24。输出所有不同算法的计算表达式,可为运算优先级而使用括号。
二.问题分析:
1.全面性:
此问题要求输出结果为24的计算表达式,并且要求输出要全面,我考虑用for循环与递归实现遍历来保证输出的全面性,考虑到递归的‘一归到底',每一次完整递归都代表一种算法(详情见算法)。 2.输出的判定和四位数字的类型:
在输出的时候对最后结果等于24的判别,因为考虑到有除法,有可能中途结果可能会出现不能整除的情况与小数,所以输出的四个数都设为float型,且输出判定的时候用近似判定法,而不直接写让最后结果等于24(详情见算法)。 3.重复性:
如果用循环与递归保证了输出24的表达式的全面性,但不可避免的会出现重复,才开始我想在遍历与递归时,加一些限定条件来消除重复但是这样做不但会出错,还不能保证它的输出全面性。于是我想在输出的时候加限定条件,使重复的只输出一遍。
但是对于输入的那4位数字中如果有重复的话,程序结果还是会出现重复的,此问题尚未解决.(详情见算法)。
4.括号问题的处理:
对于括号问题,我规定对每一步的计算表达式,除了*之外,+,-,\\都加上括号,即让程序按自己规定的方向执行,输出的括号只是让人能看懂,其实在运算时不起作用(详情见算法)。 5.输出:
输出方面我以为用了遍历所以在每一层遍历都把运算表达式存到一个较大的数组中,在输出的时候如果满足输出条件(在遍历时纪录每次递归的第一次运算的结果,第一次运算的运算符,第二次运算的结果,第二次运算的运算符和第三次运算的运算符),就直接把那个数组里的内容输出,遍历会直接去寻找表达式里的表达式(详情见算法)。
三.算法描述(源代码里有更详尽解释):
1.主要方法: 遍历与递归。 2.主要思路:
把输入的四个数放在一个数组n[4]中,然后任取其中任意两个(不能取同一个--既不能出现自己和自己运算的情况),然后用一个for和一个switch语句来实现这两个数的加减乘除运算, 然后把运算的结果放到另一个数组b[4]中并记录此运算的表达式(放到一个大一点的数组tm[4][25]中),同时把其他两个没用到的数也放到该数组中,然后重复以上过程(用遍历实现),最后先判定是不是最后一层运算,是的话在判定最后结果是不是等于24,等于24的话就把那个纪录运算式的数组输出。 然后考虑到不能出现重复的(例如:1*2*3*4和2*4*3*1等等)我在遍历的同时记录了第一次运算的结果,第一次运算的运算符,第二次运算的结果,第二次运算的运算符和第三次运算的运算符,对输出的时候做限定(例如:对运算符全*的只输出一遍等等)。在有一次输出后我还定义了另外两个数组用来分别保存上一次输出的第一次运算的结果,第一次运算的运算符,第二次运算的结果,第二次运算的运算符和第三次运算的运算符,来解决重复输出的问题,不过此种做法有可能导致输出的时候不全。(此问题尚未解决)即还不能同时保证全面性与不重复性。 3.主要函数与数组:
主要有两个函数,一个主函数,用来输入四个数,并且完成初始化。还有一个count(float a[],char tem[][25],int n)函数,用来完成遍历,递归,与输出,其中a[]中存放要输入的4个数,tem[][25]中放计算步骤,n是a[]中元素的个数。在函数体内还定义了b[4]和tm[4][25]用来完成递归,函数一开始先判定输出条件(是否是第三次运算,结果是否等于24),如果不满足条件就做遍历与递归,遍历用了3个for循环和1个switch语句来完成,然后为递归准备数据,用sprintf函数将运算式输出到数祖tm[]中,在输入运算式的同时把括号输到tm[]中,然后提取第一次运算的运算符与运算结果,提取第二次运算的运算符与运算结果和提取第三次运算的运算符,然后备份没用到的数据(为递归之用)。接下来进行递归重复上述过程。
4.算法流程图:(简化的流程图,源代码里有更详尽解释)
其中k是全局变量用来判定算法是否有解主函数流程图开始char br=1;int dbr=1NYfloatnumber[4]chartemp[4][25];输入四个数到数组中初始化temp[4]调用count函数Nk=0Yno answercout< 才开始是3层for循环然后是一个switch语句count(函数流程图开始float b[4];char tmp[4][25]int i,j,l,x,y;Yn=1是否满足输出条件Y输出Nn>1NNYi=0Ni 四.源代码及其分析 #include #define MAX 4;//最大输入个数。 int k=0;//全局变量 用来判定是否有解 char tp[4]={0,0,0,0},tpt[2000]={0},tptt[2000]={0},tre[2000]={0};//用来消除重复。tp[1-3]用来记录运算式中的3个运算符。 char op[4]={'+','*','-','/'}; void count(float a[],char tem[][25],int n);//a[]中存放要输入的4个数,tem[][25]中放计算步骤,n是a[]中元素的个数。 int q=0,p=0,e=0,w=0,t=0,r=0,g=0,h=0,v=0,u=0,tu=0,te=0;//用于消除重复。 float group[2]={0,0},flow[20]={0},flo[20]={0};// //tem[][25]中放计算步骤,n是a[]中元素的个数。 void main() { char br=1; int d; while (br==1) { float number[4];//放四个数。 char temp[4][25]; //放运算式,初始化放四个数。 cout<<\ cout< for(d=0;d<4;d++) cin>>number[d];//输入四个数 for(d=0;d<4;d++) { sprintf(temp[d],\ }//初始化temp[d]; count(number,temp,4);//调用count函数。 if (k==0) cout<<\ cout< cout<<\ scanf (\} } void count(float a[],char tem[][25],int n) { float b[4]; char tm[4][25];//b[4]和t[4][]作用同上(为 递归之用)。 int i,j,l,x,y;//i,j用来作双循环;l用来作加减乘除的开关;x,y为后面准备递归数据之用。 /************************************************************************************/ //输出部分 if(n==1) { if (fabs(a[0]-24)<0.00001)//因为要考虑除法所以用fabs函数求绝对值与24比较。 //相当于等于24时的情况。 { /************************************************************************************/ //以下是限定输出条件: if(tp[3]=='-'&&tp[2]=='-'&&tp[1]=='*') { if(te==0) { cout<<\有解为\最后的运算式存在tem[0]中 k=1; te=1; } }//对运算符全*的只输出一遍。 else if(tp[3]=='+'&&(tp[2]=='+'||tp[0]=='+')&&tp[1]=='+') { if(t==0) { cout<<\有解为\最后的运算式存在tem[0]中 k=1; t=1; } }//对运算符全+的只输出一遍。 else if(tp[3]=='+'&&(tp[2]=='*'||tp[0]=='*')&&tp[1]=='+') { if(g==0) { cout<<\有解为\最后的运算式存在tem[0]中 k=1; g=1; } } else if((tp[3]=='-'&&tp[2]=='+')||(tp[3]=='+'&&tp[2]=='-')) { if(w==0) { cout<<\有解为\最后的运算式存在tem[0]中 k=1; w=1; } }//对于第二次运算时取到b[0]时,第一第二个运算符是+,-或-,+的只输出一遍。 else if(tp[3]=='+'&&tp[2]=='+')
正在阅读:
游戏24点课程设计报告09-11
人教版七年级上期中地理测试卷07-24
铅笔刀的自述作文300字06-18
二〇一八年聊城市初中学生学业水平考试数学试题 - 图文09-29
上学期七年级英语期中测试卷01-30
成人常规肺功能参数及其临床意义10-18
公安学基础08-09
(梅州)中考英语 第一章 基础知识 第十一节 动词的时态检测复习05-17
望城县乌山镇总体规划-文本03-08
陕西省继续医学教育管理实施细则02-02
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 课程
- 报告
- 设计
- 游戏
- 植物蛋白酶提取纯化工艺
- 初三数学数学总复习系列 因式分解(三) - 194
- 千阳岭隧道改扩建工程施工技术
- 福建省人民政府关于印发福建省省级政府投资项目代建制管理办法(试行)的通知
- 2016年物理操作试题十七及标准
- 华为技术有限公司 - 结构物料PCN操作要求 - VA
- 2015年国家公务员考试考前常见问题汇总
- 二环世纪星支行举办元宵佳节猜灯谜活动
- 桐木初级中学教师赛教活动方案
- 2018年最新苏教版三年级语文下册教案全册教学设计
- 刚性道面单板及带接缝板的ABAQUS建模讲义
- 2019精选教育小学奥数教程不定方程与不定方程组 教师版 全国通用 doc
- 甲级单位编制选钉机项目可行性报告(立项可研+贷款+用地+2013案例)设计方案
- 初中数学总复习教案3
- 中国中医科学院中药综合真题
- 2019届陕西省高三上学期第三次月考语文试卷含答案及解析
- 2016-2022年中国重型钢结构产业专项调研及投资动向研究报告
- 《法律文书学》练习题及参考答案(二)
- 北京市2019年初三数学一模试题分类汇编 - 填空压轴题
- 青藏高原对全球变暖的响应