1 / 11

循环程序设计(枚举算法举例)

循环程序设计(枚举算法举例). 算法举例: 1 、穷举算法:对问题的所有可能一一测试,直到找出解或将全部状态测试过为止。 循环控制有两种办法:记数法与标志法。记数法是先要确定循环次数,然后逐次测试,完成测试次数后,循环结束。标志法是循环次数无法事先确定的情况下,就确定一个结束目标,达到目标后,使循环结束。. Cocks+hens+chichs=100; 5*cocks+3*hens+chicks/3=100;. Cocks: 0-------19; Hens: 0--------33; Chicks: 0------100;.

Download Presentation

循环程序设计(枚举算法举例)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 循环程序设计(枚举算法举例) 算法举例: 1、穷举算法:对问题的所有可能一一测试,直到找出解或将全部状态测试过为止。 循环控制有两种办法:记数法与标志法。记数法是先要确定循环次数,然后逐次测试,完成测试次数后,循环结束。标志法是循环次数无法事先确定的情况下,就确定一个结束目标,达到目标后,使循环结束。

  2. Cocks+hens+chichs=100; 5*cocks+3*hens+chicks/3=100; Cocks: 0-------19; Hens: 0--------33; Chicks: 0------100; 循环程序设计(枚举算法举例) • 例1:百钱买百鸡。(鸡翁一值钱五,鸡母一值钱3,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何? 由题意可知

  3. 循环程序设计(枚举算法举例) Cocks从0到19,每取一个值,对hens的取值范围内的每个值依次测试,看能找到哪些hens及chicks满足题意(例L3_11) 例2、搬砖问题:36块砖,36人搬,男搬4,女搬3,两个小孩抬一块砖。要求一次全搬完,问男、女、小孩各若干? 解:据题意: men的值:0--8 women的值:0--11 children的值:0--36

  4. 循环程序设计(枚举算法举例) 使用枚举法,主要掌握两条原则:1、确定搜索范围。 2、选择搜索策略。 搜索策略选择得好坏,直接决定程序的工作量的大小。 例L3—15:验证素数: 分析:看在2——n/2中能否找到一个整数m能将n整除,若m存在,则n不是素数;若找不到m,则n为素数。

  5. 迭代(1) 算法2:迭代。不断用新值取代变量的旧值或由旧值递推出变量的新值的过程。 例如:人口增长问题: 现有12亿人,按年2%的增长速度,10年后将有多少人? 分析:设现有人口数为M,则第一年后人口变为: M*(1+2%),第二年后,把上述赋值表达式再执行一次,要计算10年后的人口,就是把上述表达式执行10次。可以用循环来实现。

  6. 迭代(2) 迭代次数 初值; 迭代公式; 迭代与下列因素有关: 例L3—12:兔子繁殖问题: 设有一队新生兔子,从第三个月开始每个月都生一对兔子,按此规律,并假设没有兔子死亡,一年后共有多少兔子?(请同学们写出每月兔子数,找出规律) 每月兔子呈如下规律:1,1,2,3,5,8,13,21,34…… f1=f2=1; f3=f1+f2;f4=f2+f3; …… f n+1=f n+f n-1 找出迭代规律:

  7. 例L3_13求2个非负整数的最大公约数。 int gcd( int u, int v) { int r; while (v != 0) { r=u%v; u=v; v=r; } return (u); } u=55 v=15 r=u%v=10 u=15 v=10 r=u%v=5 u=10 v=5 r=u%v=0 u=5 v=0(终止) 迭代(3)

  8. continue语句结束本循环的当次循环、注意与break的区别。continue语句结束本循环的当次循环、注意与break的区别。 1、在循环体中使用break语句时,会使整个循环提前结束,转移到循环体外。 2、continue语句只能用在循环体中,它的作用是跳过其后面的语句。直接将控制转移到下一轮循环。 例:L3—14-1 L3—14—2 Continue 和 break

  9. 指出下列程序的运行结果: main() {int x=1,i=1; for ( ;x<50;I++) {if(x>=10) break; if(x%2!=0) {x+=3; continue;} x-=1; } printf(“%d\n”,x); printf(“%d\n”,I); } Main() {int m=7;n=5;i=1; do {if(i%m==0) if(i%n==0) {printf(“%d\n”,i); break;} i++;}while (i!=0) } 练习

  10. 作业 • 求两个整数的最小公倍数。 • 找出所有的三位数,要求它的各位数字的立方和正好等于这个三位数。例如:153=13+53+33就是这样的三位数。 • 一位卡车司机违反交通规则,撞死了行人。当时有三位目击者,都没有看清卡车的牌照号码,只记住了牌照的某些特征:甲记住前两个数字是相同的,乙记住牌照的后两位数字是相同的,丙是一位数学家,他说:“牌照号码肯定是一个四位数,并且这个四位数恰好是一个整数的平方。”根据这些,你能否正确判断出牌照号码?(此题为选做题)

  11. 作业 • 下面的公式可以用来计算圆周率PI的近似值: PI/8=1/(1*3)+1/(5*7)+1/(9*11)+…… 请编程序计算公式的前15项,看PI的近似值是多少。 • 3.13.4 • 输入一个整数,将此数的每一位数按逆序打印(如输入1235,则输出5321)

More Related