2013年信息学奥赛培训典型程序..docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息学奥赛典型程序 刘建国 2013. 10. 8 例 1 :把整数 3025 从中剪开分为 30 和 25 两个数,此时再将这两数之和平方, (30+25)2=3025 计算结果又等于原数。求所有符合这样条件的四位数。 解:设符合条件的四位数为N,它应当是一个完全平方数,用(a*a)表示。 为了确保N=(a*a)在四位数(1000?9999)范围内,可确定 a在32? 99 循环; 计算N=a*a ;将四位数N拆分为两个数n1和n2; 若满足条件(n1+n2)*(n 1+ n2) = N就输出N 。 Pascal 程序: Program Exam35; Var N, a, x, n1, n2: Integer; Begin for a:=32 to 99 do begin N:=a*a; N1:= N div 100 ; {拆取四位数的前两位数} n2:= N-n1*100 ; {拆取四位数的后两位数} X:=n1+n2; if x*x=N then writeln (N); end; Readln End. 例 2:[例 3.6]用“*”号打印出如下的长方形图案。 ********* ********* ********* ********* 解:① 上面给出的图例共有4行,我们可以用一个循环控制行的变化; ② 在每行中又有 9 列,我们可以在前面控制行的循环中再套一个循环 来控制列的变化。 Pascal 程序: Program ex36; Begin Var a, b: Integer; For a := 1 to 4 do {外循环控制行的变化 } Begin For b := 1 to 9 do write(‘*); {内循环控制列的变化 } Writeln; {输出一行的“ *”后换行} End; Readln; End. 程序中的循环对于a的每个值都包含着一个b=(1?9)次的内循环。外循环for a 将内循环 for b 包含在里面,称为 for 循环的嵌套。嵌套形式如 : for a:=n1 to n2 do for b:=m1 to m2 do 循环体语句; 例 3:用“ *”号打印出如下的长方形图案。 ******* ********* *********** Program daxing(input,output); Var i,k: Integer; Begin For i := 1 to 6 do { 外循环控制行的变化 } Begin Write(‘‘:(-1)*i+10); For k := 1 to 2*i-1 do write(‘*); {内循环控制列的变化 } Writeln; {输出一行的“ *”后换行 } End End. [例 4] 打印出小九九乘法表 (: 体会一下与我们原先编写的小九九的不同之处) 解:设a为被乘数,范围为1?9; b为乘数,范围为1?a;乘式为a*b=(a,b 的乘积 ),则 a=1: b=1? a 1*1=1 a=2: b=1? a 2*1=2 2*2=4 a=3: b=1? a 3*1=3 3*2=6 3*3=9 a=4: b=1? a 4*1=4 4*2=8 4*3=13 4*4=16 a=9 b=1? a 9*1=9 9*2=18 ?… 9*9=81 ⑴从上面分解的横行中看到共有 9行,这里的“行”数变化与a的变化从1? 9 相同,可用 a 控制“行”的循环; ⑵每“行”里面相乘的次数与 b的范围相关,由b控制每“行”里面的“内 部”循环; ⑶内循环被包含在最里层,执行完每“行”的内部循环,就到下一“行”去 执行新“行”里面的循环,每“行”都拥有形式相同的( b=1?a )内循环。 即每到一“行”都要执行该“行”的内循环。这里所指的“行”可以理解成 抽象的行,不一定是实际上具体对应的行,可以是一个处理“块” 。 Pascal 程序: Program Exam37; Var a, b: byte; Begin for a:=1 to 9 do { 外循环 } begin for b:=1 to a do { 内循环 } write(a, * , b, = ,a*b, :3); writeln end; Readln End. 根据这种格式还可以实现多层循环嵌套 ,例如: for a:=n1 to n2 do for b:=m1 to m2 do for c:=k1 to k2 do 循环体语句; [例5]:输入n,求n以内所有能被2整除但不能被3整除的整数的和。n=1000 var n,i:integer; s:longint; begin readln(n); s:=0; for i: = 1 to n do if (i mod 2=0)and(i mo

文档评论(0)

magui + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8140007116000003

1亿VIP精品文档

相关文档