循环语句的综合应用_第1页
循环语句的综合应用_第2页
循环语句的综合应用_第3页
循环语句的综合应用_第4页
循环语句的综合应用_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十三课循环语句的综合应用例1faibonacci(费波拉契):数列的前几个数分别为,编程求此数列的前n项。分析:第、项的值是,从第项开始,它的值是前两项的值的和。F(1)=0F(2)=1F(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)=(

2、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)是不是都是素数,如

3、果都是,输出解,如果不全是,继续穷举第一个数,从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 the

4、n b1:=false; i:=i+1; until b1 and b2; 直到两个数全是素数if b1 and b2 then writeln(n,=,i-1,+,n-i+1) i多加了1end. 练习1、任给一个自然数n(n2.1*109),求出这个自然数不同因数的个数。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的因子和正好等于

5、A,且A ,则称,为亲密数对。例如284和220,220的因子有1,2,4,5,11,20,22,44,55,110,他们和为284,284的因子有1,2,4,71 112,他们和为220。程序要求:找3100000中的亲密数对,注意不要重复显示。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 w

6、riteln(a:5,b:5); end;end.3、 求1N(N100000)中的完全数,所谓完全数是指因子和正好等于本身的数。如28=1+2+4+7+14,故28就是一个完全数,程序输入N,输出在此范围内的完全数。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.4、 级数求和 问题描述:已知:Sn= 112131n。显然对于任意一个整数K,当n足够

7、大的时候,Sn大于K。现给出一个整数K(1=k=15),要求计算出一个最小的n;使得SnK。 输入 k 输出 n 样例 输人:1 输出:2var s:real; i,k:integer;begin readln(k); s:=0; i:=1; while s=k do begin s:=s+1.0/i; i:=i+1; end; writeln(i-1);end.5、 蜜蜂路线问题描述一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房M开始爬到蜂房N,MN100,有多少种爬行路线?如输入:1 14则输出:377var m,n,s,i,k:integer;begin readln(m,n); s:=0; k:=n-m-1; while k0 do begin for i:=k downto 1 do s:=s+i; s:=s+1; k:=k-1; end; writeln(s+1);end.6、 有一堆100多个的零件,若三个三个数,剩二个;若五个五个数,剩三个;若七个七个数,剩个。请你编一个程序计算出这堆零件至少是多少个?var i:i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论