山师附中课件mutong在yj41上第5讲综合练习_第1页
山师附中课件mutong在yj41上第5讲综合练习_第2页
山师附中课件mutong在yj41上第5讲综合练习_第3页
山师附中课件mutong在yj41上第5讲综合练习_第4页
山师附中课件mutong在yj41上第5讲综合练习_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、第六讲、 综合练习1、陶陶摘苹果(NOIP2006p)(apple.pas/c/cpp)【问题描述】 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。 现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。【输入】第1行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。第2行包含10个100到200之间(包括100

2、和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。【输出】输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。【样例输入】110100 200 150 140 129 134 167 198 200 111【样例输出】5var h,x,sum,i:integer;begin sum:=0; readln(h); h:=h+30; for i:=1 to 10 do begin read(x); if x=h then sum:=sum+1; end; writeln(sum);end.2、灯的开关状态 有N个灯放成一排,从1到N依次

3、顺序编号,开始时全部打开。有N个人也从1到N依次编号。1号人将灯全部关闭,2号人将凡是编号为2的倍数的灯打开;3号人将凡是编号为3的倍数的灯作相反处理(该灯如为打开的, 则将它关闭;如关闭的,则将它打开)。以后的人都和3号人一样,将凡是自己编号倍数的灯作相反处理。编程实现:第N个人操作后,按顺序输出灯的状态。(1-表示灯打开,0-表示灯关闭)输入:n(n=100),灯的个数,输出:灯的状态,01序列,中间无空格。样例:输入:2输出:01 N=20,开始状态全为1编号1234567891011121314151617181920状态01101111011111101111var n,m,i:in

4、teger;begin readln(n); for i:=1 to n do begin m:=trunc(sqrt(i); if m*m=i then write(0) else write(1); end;end.编号i的灯的操作次数等于因数个数,只有完全平方数的因数个数为奇数.所以判断第i个灯的状态:如果i是完全平方数则状态为0,否则为1.算法分析:结论:编号为i的灯经过偶数次操作为1,奇数次操作为0.3、Fibonacci数列数列的前两项分别是0、1,从第三项开始,每个数均为前面两项的和,即:0,1,1,2,3,5,8,。输入n输出数列的第n项值,n0.0001 do begin f

5、1:=sin(a)-a/10; f2:=sin(b)-b/10; f:=sin(a+b)/2)-(a+b)/2/10; if f1*f=0 then a:=(a+b)/2; if f2*f=0 then b:=(a+b)/2; end; writeln(a:0:3);end.6、 输入一个正整数N(0 then writeln(i, ,s); end;end.7、已知:N!= 1*2*.*n。输入n(10000),求n!后面连续0的个数。样例输入: 15样例输出: 3 (说明: 15!=1307674368000)var n,i,s,t:integer;begin readln(n); s:=

6、0; for i:=1 to n do begin t:=i; while t mod 5=0 do begin s:=s+1; t:=t div 5; end; end; writeln(s);end.算法一var n,s:integer;begin readln(n); s:=0; while n0 do begin s:=s+n div 5; n:=n div 5; end; writeln(s);end.算法二8、编程验证歌德巴赫猜想:“对于任意一个偶数n(=4),都可以表示成两个素数的和”。4=2+26=3+38=3+598=17+79输入: 偶数n输出:和为n的两个素数。如果n是奇

7、数,输出-1.如输入:22输出:22=3+1922=5+1722=11+11var n,i,j,p,q,yesp,yesq:longint;begin readln(n); if n mod 20 then begin writeln(-1); halt; end; for i:=2 to n div 2 do begin p:=i; yesp:=1; for j:=2 to p-1 do if p mod j=0 then begin yesp:=0; break; end; if yesp=1 then begin q:=n-i; yesq:=1; for j:=2 to q-1 do i

8、f q mod j=0 then begin yesq:=0; break; end; end; if (yesp=1)and(yesq=1) then writeln(n,=,p,+,q); end;end.8、津津的储蓄计划(NOIP2004T)(save.pas/dpr/c/cpp)【问题描述】 津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她

9、预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。 例如11月初津津手中还有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了11月月末,津津手中会剩下3元钱。 津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的前,不够这个月的原定预算。如果出现这种情况,津津不得不在这个月省吃俭用,压缩预算。 现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,

10、妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。【输入文件】输入包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。【输出文件】输出一行,这一行只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X 表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。 【样例输入 1】29023028020030017034050908020060【样例输出 1】-7【样例输入 2】29023028020030017033050908020060【样例输出 2】1580Const m=300;Var save,left,x

11、,i:integer;begin left:=0; save:=0; for i:=1 to 12 do begin read(x); if xm+left then begin writeln(-i); exit; end; if m+left-x=100 then begin save:=save+100*(m+left-x) div 100); left:=(m+left-x) mod 100; end else left:=m+left-x; end; writeln(1.2*save+left:0:2);end.If then 语句1 Else 语句2For i:=a to b do

12、 While 条件 do 习题训练:1、 输入一个三位数的整数,将数字位置重新排列,组成一个尽可能大的三位数。【样例输入】215【样例输出】521var n,a,b,c:longint;begin readln(n); a:=n div 100; b:=(n div 10)mod 10; c:=n mod 10; if (a=b)and(b=c) then writeln(a*100+b*10+c); if (a=c)and(c=b) then writeln(a*100+c*10+b); if (b=a)and(a=c) then writeln(b*100+a*10+c); if (b=c

13、)and(c=a) then writeln(b*100+c*10+a); if (c=b)and(b=a) then writeln(c*100+b*10+a); if (c=a)and(a=b) then writeln(c*100+a*10+b);end.2、 输入若干个字符,它的终止符是,计算输入的字符中字母A或a出现的次数(包含大小写)。如:输入:sdaa2323AAfa 输出:5 var ch:char; s:integer; begin s:=0; read(ch); while ch do begin if (ch=a)or(ch=A) then s:=s+1; read(ch); end; writeln(s); end.

温馨提示

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

评论

0/150

提交评论