- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《24点程序设计报告
程序设计实践报告
( 2011 / 2012学年 第 二 学期)
题 目: 算24点问题
专 业
学 生 姓 名
班 级 学 号
指 导 教 师 王志伟
指 导 单 位 计算机学院信息安全系
日 期 2012.5.28 ~ 2012.6.8
评 分 细 则 评分项 优秀 良好 中等 差 遵守机房规章制度 上机时的表现 学习态度 程序准备情况 程序设计能力 团队合作精神 课题功能实现情况 算法设计合理性 用户界面设计 报告书写认真程度 内容详实程度 文字表达熟练程度 回答问题准确度 简 短 评 语
教师签名:
年 月 日 评分等级 备注 评分等级有五种:优秀、良好、中等、及格、不及格
算24点问题
课题内容和要求
在屏幕上输入1~10范围内的4个整数(可以重复),对它们进行加、减、乘、除四则运算后(可以加括号限定计算的优先级),寻找计算结果等于24的表达式。例如输入4个整数4,5,6,7,可得到表达式4*((5-6)+7)=24。这只是一个解,本题目要求编程求出全部解。要求表达式中的数字顺序不能变。
本题的关键问题是如何确定解空间。假如输入的4个整数A,B,C,D,如果不考虑括号的优先级情况,仅仅用四则运算连接,共有4^3=64种表达式情形。如果考虑加括号,共有5种情形。将两种情况综合考虑,共有64*4=320中表达式。本题的任务就是在这320种表达式中寻找24的表达式。
二、概要设计
总体设计:
应用穷举法搜索整个解空间,筛选出符合题目要求的全部解。关键的问题是如何确定该题的解空间。假设输入的4个整数为A、B、C、D,如果不考虑括号优先级的情况,仅用四则运算符将它们连接,例如:A+B*C/D…,共有43=64种表达式情形。如果考虑加括号的情况,暂不考虑运算符,共有以下5种情形:
((A□B)□C)□D(A□(B□C))□DA□(B□(C□D))A□((B□C)□D)(A□B)□(C□D)
其中□代表(+-*/)任意的运算符。将上面两种情况综合起来考虑,每输入4个整数,其构成的解空间为64*5=320种表达式。也就是说,每输入4个整数,无论以什么方式或优先级进行四则运算,其结果都会在这320种答案之中。我们的任务就是在这320种表达式中寻找出计算结果为24的表达式。
具体的实施办法:
步骤1.将不同位置上的运算符设置成为不同的变量:A op1 B op2 C op3 D
规定变量op1、op2、op3取值范围为1、2、3、4,分别表示加、减、乘,除四种运算。如表1所示。
表1? 变量op1、op2、op3与运算符的对应情况
op1、op2、op3
变量值 表示的运算 op1、op2、op3
变量值 表示的运算 1 + 3 * 2 – 4 / 这样通过一个4重循环就可以枚举出不考虑括号情况的64种表达式类型。算法如下:
for(op1=1;op1=4;op1++) ?
????for(op2=1;op2=4;op2++) ?
????????for(op3=1;op3=4;op3++) ?
{得到一种不含括号的表达式情形:A?op1?B?op2?C?op3?D}?
步骤2.在表达式中添加括号,以及如何通过每种表达式的状态计算出对应的表达式的值。
上述算法得到的每一种表达式都可能具有5种添加括号的方式。而这5种添加括号的方式实际上涵盖了该表达式的所有优先级可能的运算。例如表达式:A+B-C*D的5种添加括号的方式为:
((A+B)-C)*D(A+(B-C))*DA+(B-(C*D))A+((B-C)*D)(A+B)-(C*D)
由于每一种表达式的计算顺序(优先级)不尽相同,为了避免表达式运算的麻烦,可以设置5个函数,分别对应每一种类型表达式的计算:
函数1:对应表达式类型:((A□B)□C)□D
声明:float?calculate_model1(float?i,float?j,float?k,float?t,int?op1,int?op2,int?op3) ;
实现代码?:flo
文档评论(0)