- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
扑克牌游戏2
本科学生实验报告
C++课程设计
组长姓名 黄跃武 组长学号 0104024
专 业 软件工程 班级 软件105班
实验项目 扑克牌游戏问题
实验类别 综合性实验
指导教师 严军勇
开课学期 2011 至 2012 学年 第一 学期
实验设计方案
实验名称:扑克牌游戏问题 实验时间: 2011-11-12——2011-11-26 实验场地: w101 软件环境: VC6.0/Windows XP 小组成员姓名与学号:黄强 0104026 实验内容与目的(简单介绍实验内容,说明实验目的)
实验目的:实现扑克牌游戏:对于任意的四个1到13的整数(四张扑克牌),求能算出24的表达式;运算符有()+-*/;若无解则输出相应的信息。
实验内容:文件输入(input.txt)输出(output.txt),输出全部结果;输入输出格式自定。
——————————————————————————————————————
实验准备工作(阐述解决问题所涉及的算法思想,至少要画一个算法流程图来说明)
算法思想:
本实验采用类似于穷举法,结合堆栈来实现的。
首先是穷举法的过程,采用+、-、*、/、(、)使四个数计算成24,可以将表达式分为3种情况:
无括号,组成的表达式中只有四个数和三个运算符,总共7个字符;
有一个括号,组成的表达式中有四个数、三个运算符、一个括号,总共9个字符;
有两个括号,组成的表达式中有四个数、三个运算符、两个括号,总共11个字符
将输入的四个数进行全排列,根据四个数字中有多少个相同数字将全排列后的组数可以分4种情况:
四个数都不相同,全排列后的种数为4*3*2*1=24;
四个数中有两个相同,全排列后的种数为4*3*2*1/(2*1)=12;
四个数中有三个相同,全排列后的种数为4*3*2*1/(3*2*1)=4;
四个数中有三个相同,全排列后的种数为4*3*2*1/(4*3*2*1)=4;
为避免全排列的中有相同的排列,首先将四个数24种全排列存放在二维数组中(sort[24][4]),此时若属于第2、3、4种情况时,sort[24][4]中有重复的排列,则利用循环语句将sort[24][4]中的排列转存至ZL_sort[24][4](元素初值全为24),并用m计算二维数组ZL_sort[24][4]中的排列数,下次比较时将sort中的元素与ZL_sort进行比较,若sort中的这种排列与ZL_sort中的24种排列都不相同,则写入ZL_sort中,并成为第m+1个元素。
处理没有括号的情况,此时需要进行三步运算,运算符的选取方法总共有4*4*4=64种情况,用一个二维数组char_sort[64][3]存储选取的64种运算符。那么表达式的排列有m*64种,将这m*64种情况存入二维数组x[1536][8](1536表示m取最大值24时m*64=1536,8表示4个数、3个运算符、#,#在处理堆栈时应用),且处理时满足条件则n++(n初始值为0)。
处理一个括号的情况,可以分为(a^b)^c^d、a^(b^c)^d、a^b^(c^d)、(a^b^c)^d、a^(b^c^d)五种情况,所有的排列种数为4*4*4*5种情况,显然存在许多不必要排列,例如:(a+b)+c+d、(a*b)+c-d、a+(b*c)-d……没有必要添加括号,可以当作无括号的情况处理,经过分析之后,总共有112种情况。那么表达式的排列有m*112种,将这m*112种情况存入二维数组x1[2688][10](2688表示m取最大值24时m*122=2688,10表示4个数、3个运算符、(、)、#,#在处理堆栈时应用)。因为括号分为5种情况所以处理时也须将这五种情况一一考虑,且处理时满足条件则w++(w初始值为0),w在这5种情况中连续使用。
处理两个括号时情况,此时只有(a^b)^(c^d)这种情况时括号才有意义,也不和前面的表达式重复,总共有2*2*2=8种情况。那么表达式的排列有m*8种,将这m*8种情况存入二维数组x[192][12](192表示m取最大值24时m*8=192,12表示4个数、3个运算符、2个括号、#,#在处理堆栈时应用),且处理时满足条件则v++(v初始值为0)。
利用穷举法已经将所有的表达式给出,此时只需将表达式植入堆栈中进行运算即可。处理堆栈运算首先要建立两个栈类型,一个是整形用来存放数字,一个字符型用来存放运算符;然后创建两个空栈,在字符栈中首先压入字符’#’,以便一个表达式执行完后(表达式中最后一个字符为#和首先压入的#抵消)退出;最后进行表达式的运算,表达式的运算是出栈和入栈的操作:若读入数据为数字,则直接入操作数
文档评论(0)