计算24点程序解答.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算24点程序解答.doc

算24点程序:原理, 向过程的C实现,面向对象的java实现 1、概述 给定4个整数,其屮每个数字只能使用-?次;任意使川+?* / (),构造出一个表达式,使得 最终结果为24,这就是常见的算24点的游戏。这方血?的程序很多,一般都是穷举求解。 本文介绍一种典型的算24点的程序算法,并给出两个具体的算24点的程序:一个是面向过程的C 实现,一个是面向对象的java实现。 2>基本原理 基木原理是穷举4个整数所有可能的表达式,然示对表达式求值。 表达式的定义: expression = (expression]number) operator (expression!number) 因为能使用的4种运算符+?* /都是2元运算符,所以本文屮只考虑2元运算符。2元运算符 接收两个参数,输出计算结果,输出的结果参与后续的计算。 由上所述,构造所有可能的表达式的算法如F: 将4个整数放入数纟R中 在数组小取两个数字的排列,共有P(4,2)种排列。对每一个排列, 对+?* /每一个运算符, 根据此排列的两个数字和运算符,计算结果 改表数组:将此排列的两个数字从数组屮去除掉,将2.1.1计算的结果放入数组中 对新的数组,重复步骤2 恢复数组:将此排列的两个数字加入数组中,将2.1.1计算的结果从数组中去除掉 可见这是一个递归过程。步骤2就是递归函数。当数组屮只剩下一个数字的时候,这就是表达式 的最终结果,此时递归结朿。 在程序屮,-?定要注意递归的现场保护和恢复,也就是递归调川之前与之后,现场状态应该保持一 致。在上述算法屮,递归现场就是指数组,2.1.2改变数组以进行下一层递归调用,2.1.3则恢复数组, 以确保当前递归调用获得下一个正确的排列。 括号()的作用只是改变运算符的优先级,也就是运算符的计算顺序。所以在以上算法中,无需考 虑括号。括号只是在输出时需加以考虑。 3、面向过程的C实现 这是csdn算法论坛前版主海星的代码,程序非常简练、精致: #include iostream #include string #include cmath using namespace std; const double PRECISION = IE-6; const int COUNT_OF_NUMBER = 4; const int NUMBER_TO_BE_CAL = 24; double numbcr[COUNT_OF_NUMBER]; string expression[COUNT_OF_NUMBER]; bool Search(int n) { if (n == 1) { PRECISION )if ( fabs(numberLOJ ? NUMBER_TO_BE_CAL) PRECISION ) cout ? expressionfO] ? endl; return true; } else { return false; } 〃递归因数 for (int i = 0; i n; i++) { for (int j = i + 1; j n; j++) { double a,b; string expa, expb; a = number[i]; b = number|jj; number[j] = number[n - 1]; expa = expression[i]; expb = expression [j ]; expression [j] = expression[n - 1]; expression[i] = 4- expa + 屮 + expb + number[ij = a + b; if ( Search(n - 1) )return true; expressionfi]= + expa + L + expb + number[i] = a - b; if ( Search(n - 1) )return true; expression[ij = 4- expb + ?+ expa + numberfil = b ? a; if ( Scarch(n - 1) )return true; expression[ij = (‘numberfi] = a+ expa + b;expb +if ( Scarch(n1) ) return expression[ij = (‘ numberfi] = a + expa + b; expb + if ( Scarch(n 1) ) return true; 讦(b != 0) i expressionfi] = number[i] = a 讦(Search(n V + / b; -1) expa + )return T + true; expb + J if f (

您可能关注的文档

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档