- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- (2024秋新版)人教PEP版三年级英语上册全册教案.doc
- ISO15189质量手册--输血科通用模版(文档-100页).docx VIP
- RBA6.0版标准资料学习课件.ppt VIP
- 2025年北森领导力测试题及答案.doc VIP
- AI政务大厅业务平台架构方案.pptx VIP
- 医疗器械临床应用管理办法.pptx VIP
- 征信简版电子版PDF个人信用报告最新版2024年可编辑带水印模板.pdf VIP
- 人工智能对人类发展利大于弊VS弊大于利辩论赛正方辩词一辩、二辩、三辩、四辩发言稿.pptx VIP
- 人工智能对人类发展利大于弊VS弊大于利辩论赛 反方辩词一辩、二辩、三辩、四辩发言稿.docx VIP
- 北森在线测评题库及答案.doc VIP
文档评论(0)