循环语句的综合应用.docVIP

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

第十三课 循环语句的综合应用 [例1]faibonacci(费波拉契):数列的前几个数分别为0,1,1,2,3,5……,编程求此数列的前n项。 分析:第1、2项的值是0,1,从第3项开始,它的值是前两项的值的和。 F(1)=0 F(2)=1 F(N)=F(N-1)+F(N-2) (N=3) f1 f2 f3 0 1 1 f1 f2 f3 1 1 2 这种算法称为“迭代” [例2]用尼考曼彻斯法求两个自然数a和b的最大公约数。 方法是:辗转相减。如要求158与36的最大公约数,可以进一步转化为158-36=122与36的最大公约数,继续减,如果不够减就交换两个数,直至差为0停止,最后一次不为0的数就是最大公约数。过程如下: (158,36)=(122,36)=(86,36)=(50,36)=(14,36) 前面的数比后面小,交换:=(36,14)=(22,14)=(8,14) 再交换: =(14,8)=(6,8)=(8,6)=(2,6)=(6,2)=(4,2)=(2,2)=(0,2) [例3] 连续若干个正整数之和为1000,求有多少种这样的数列。 分析:采用穷举法,穷举起点的数,从1开始试起,当和等于1000时,这是一组解,继续从2开始试起,……,一直试到1000停止。 [例4] 编写一个程序,验证哥德巴赫猜想:任一个大于等于6的偶数总可以分解为两个素数之和。输入n, 输出两个素数之和。 分析:穷举法,先穷举第一个数,从2开始试起,判断2和(n-2)……,直到两个数全是素数停止。用两个布尔型变量来测试,分别对应两个数,初始化为true,如果是素数,值就全为true,循环终止,输出解。 var i,j,k,n:integer; b,b1,b2:Boolean; begin readln(n); i:=2; repeat b1:=true; b2:=true; for j:=2 to i div 2 do {判断i是不是素数} if i mod j=0 then b1:=false; for j:=2 to (n-i) div 2 do {判断n-i是不是素数} if (n-i) mod j=0 then b1:=false; i:=i+1; until b1 and b2; {直到两个数全是素数} if b1 and b2 then writeln(n,’=’,i-1,’+’,n-i+1) {i多加了1} end. [练习] 1、任给一个自然数n(n2.1*10^9),求出这个自然数不同因数的个数。 var n,i,s:int64; begin readln(n); i:=2; s:=0; while i=(n div 2) do begin if n mod i=0 then s:=s+1; i:=i+1; end; writeln(s); end. 2、求亲密数对: 所谓亲密数对是指:A的因子和等于B,而B的因子和正好等于A,且A <>B,则称A,B为亲密数对。例如284和220,220的因子有1,2,4,5,11,20,22,44,55,110,他们和为284,284的因子有1,2,4,71 112,他们和为220。 程序要求:找3-100000中的亲密数对,注意不要重复显示。 Var a,b,c,i:longint; begin ? for a:=3 to 100000 do ??? begin ??????? b:=1; ????? for i:=2 to a do ??????? if a mod i=0 ????????? then b:=b+i; ?????????? c:=1; ????? for i:=2 to b do ??????? if b mod i=0 ????????? then c:=c+i; ?????????? if (a=c) and (ab) ??????? then writeln(a:5,b:5); ???? end; end. 求1—N(N100000)var i,j,n,s:longint; begin readln(n); for i:=1 to n do begin s:=0; for j:=1 to i div 2 do if i mod j=0 then s:=s+j; if s=i then writeln(i); end; end. 级数求和 [问题

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档