用穷举法对.PPT

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用穷举法对

* 穷举法 概 述 ? 穷举法的基本思想是不重复、不遗漏地穷举所有 可能情况,从中寻找满足条件的结果。 ? 穷举法充分利用了计算机处理的高速特性,避免 复杂的逻辑推理过程,使问题简单化。 ? 使用穷举法的关键是要确定正确的穷举的范围。 例1:百钱百鸡问题。 公鸡5文钱1只, 母鸡3文钱1只, 小鸡一文钱3只。 100文钱如何卖100只鸡? ? 条件分析 设买 x 只公鸡,y 只母鸡,z 只小鸡,则有: x+y+z=100 5x+3y+z/3=100 且:x、y、z 都是整数; 0 ≤ x ≤ 20; 0 ≤ y ≤ 33; 0 ≤ z ≤ 99; z%3=0。 ? 基本算法思想, 上述方程属于不定方程,解并不唯一,因此,可 用穷举法对 x、y、z 的所有组合情况,测试满足 条件的解。具体是: 把x可能值0~20和y可能值0~33用二重循环来组 合,每个x和y组合都可得到z值,即z=100-x-y, 若x、y、z值使5x+3y+z/3=100成立,则该组x、 y、z即为一组所求值。即: 穷举范围: x : 0~20 , y : 0~33 , z : 100-x-y 判断式: z%3==05*x+3*y+z/3==100 另一方法是:把x可能值0~20、y可能值0~33和z 可能值0~99用三重循环来组合,若x、y、z值使 5x+3y+z/3=100和x+y+z=100同时成立,则该组x、 y、z即为一组所求值。即: 穷举范围: x : 0~20 , y : 0~33 , z : 0~99 判断式: z%3==05*x+3*y+z/3==100x+y+z==100 main( ) { int x, y, z, j=1; printf(Possible solutions to buy 100 fowls whith 100 wen:\n); for (x=0; x=20; x++) for (y=0; y=33; y++) { z=100-x-y; if (z%3==05*x+3*y+z/3==100) { printf(%2d:cock=%-2d hen=%-2d chicken=%-2d\n, j, x, y, z); j++;} } } 运行结果: Possible solutions to buy 100 fowls whith 100 wen: 1: cock=0 hen=25 chicken=75 2: cock=4 hen=18 chicken=78 3: cock=8 hen=11 chicken=81 4: cock=12 hen=4 chicken=84 例2:打印出所有的“水仙花数”。所谓“水仙花 数”是指一个三位正整数,其各位数字的立方和 等于该数本身,例如:153=13+53+33 。 ? 穷举范围:即把所有的三位正整数100~999按题 意一一进行判断。 ? 判断式:如果一个三位正整数n的百位、十位、 个位上的数字分别为i、j、k,则判断式为: n = i3 + j3 + k3 ? 如何分解三位数n的百位、十位、个位: 百位:i = n/100; 十位:j = ( n/10 )%10; 个位:k = n%10; #include stdio.h main() { int n,i,j,k; for( n=100; n=999; n++ ) { i = n /100; j = ( n / 10 ) % 10 ; k = n % 1

文档评论(0)

2105194781 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档