程序设计基础 Java语言 教学课件 ppt 作者 余先锋PPTch09.ppt

程序设计基础 Java语言 教学课件 ppt 作者 余先锋PPTch09.ppt

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java系列教材 《程序设计基础》 第九章:算法与程序技巧 本章要点 穷举算法 递推算法 迭代算法 递归算法 查找算法 排序算法 算法综合与问题求解 穷举法 穷举法特点 穷举法的思路是,列举出所有可能的情况,逐个判断有哪些是符合问题所要求的条件,从而得到问题的解答。 穷举算法模式: (1)问题解的可能搜索的范围:用循环或循环嵌套结构实现; (2)写出符合问题解的条件; (3)对程序进行优化,缩小搜索范围,减少程序运行时间。 穷举法 穷举法示例 求水仙花数: 3位整数,该数等于该数各位的立方和。如: 153 = 13+53+33 int i, i0, i1, i2; for(i = 100; i 1000; i++) { i0 = i%10; //个位 i1 = i/10%10; //十位 i2 = i/100; //百位 if(i2*i2*i2 + i1*i1*i1 + i0*i0*i0 == i) { System.out.println(i); } } 穷举法 穷举法示例 将一张面值为100元的人民币等值换成100张5元、1元和0.5元的零钞,要求每种零钞不少于1张,问有哪几种组合 int y5,y1,y0; System.out.println(5元\t1元\t0.5元); for(y5 = 1; y5 20; y5++) { for(y1 = 1; y1 100; y1++) { y0 = 100 - y5 - y1; if(y5 * 5 + y1 + y0 * 0.5 == 100) { System.out.println(y5 + \t + y1 + \t + y0); } } } 穷举法 穷举法示例 公元前5世纪,我国数学家张丘建在《算经》一书中提出了一个“百钱买百鸡问题”。问题如下:鸡翁一值钱5,鸡母一值钱3,鸡雏三值钱1。百钱买百鸡,问鸡翁、鸡母和鸡雏各几何? int y5,y3,y0; System.out.println(“鸡翁\t鸡母\t鸡雏); for(y5 = 0; y5 =20; y5++) { for(y3 = 0; y3 =33; y3++) { y0 = 100 - y5 – y3; if(y5 * 5 + y3* + y0 / 3 == 100) { System.out.println(y5 + \t + y3 + \t + y0); } } } 穷举法 穷举法示例 如果一个正整数的立方能够分解为另外3个正整数的立方和,那么我们把这个正整数称为“好数”。即若A、X、Y、Z都是正整数,且满足A3=X3+Y3+Z3,则称A为好数。例如,6是最小的好数(63=33+43+53)。 请求出最小的10个好数。 穷举法 求好数: int i=0, n=4, i1, i2, i3; while (i = 10) { for(i1 = n-1; i10; i1--) //分解后的三个数,只能比n小 { for(i2 = i1-1; i20; i2--) { for(i3 = i2-1; i30; i3--) { if(i3*i3*i3 + i2*i2*i2 + i1*i1*i1 == n*n*n) { System.out.println(+n+:+i3+,+i2+,+i1); i++; } } } } n++; } 穷举法 将1,2...9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例 int x, y, z; // x:y:z = 1:2:3 int n[] = new int[10]; boolean flag; for(x = 123; x = 321; x++) { flag = true; y = 2 * x; z = 3 * x; for(int i = 0; i10; i++) n[i] = 0; f(n, x); 统计每位数的个数 f(n, y); f(n, z); for(int i = 0; i10; i++) { if(n[i] 1) { flag = false; break; } } if(fla

您可能关注的文档

文档评论(0)

带头大哥 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档