师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第6页
writeln('pi=',p); end.
相关练习:利用公式
?8?111????,求π。 1?35?79?11(计算前10000项时,答案为3.1415426536)
program e; var
i,a,b:longint; x,s:real; begin
writeln; s:=0;
for i:=1 to 10000 do begin a:=(4*i-3); b:=(4*i-1); s:=s+1/(a*b); end; writeln(8*s); end. 15、
求100~999中的水仙花数。(若三位数ABC,ABC=A3+B3+C3,则称ABC为水仙花
(★
数。例如153,13+53+33=153,则153是水仙花数。) ★,循环语句)
(答案:153、370、371、407)
program e12; var
i,a,b,c:integer; begin writeln;
for i:=100 to 999 do begin
a:=i div 100;
b:=(i mod 100) div 10; c:=i mod 10;
if i=a*a*a+b*b*b+c*c*c then write(i:8); end; end. 16、
试编写能够打印输出如下图形的程序。
(★★,循环语
句)
AAAAAAAAA AAAAAAA AAAAA AAA
师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第7页
A
program e; const n=5; var
i,j:integer; begin writeln;
for i:=1 to n do begin
write('':i);
for j:=1 to (n-i)*2+1 do write('A'); writeln; end; end. 17、
四个学生上地理课,回答我国四大淡水湖大小时这样说:
甲:“最大洞庭湖,最小洪泽湖,鄱阳湖第三。”
乙:“最大洪泽湖,最小洞庭湖,鄱阳湖第二,太湖第三。” 丙:“最小洪泽湖,洞庭湖第三。”
丁:“最大鄱阳湖,最小太湖,洪泽湖第二,洞庭湖第三。”
对于每个湖的大小,每个学生仅答对一个,请编程确定四个湖的大小。
习题部分:
1、 已知三角形的两边a、b和夹角jc的值,求第三边(已知条件由键盘输入)。 (提示:余角公式c2?a2?b2?2abcosc) (测试数据:输入a=3、b=4、jc=90;
输出5)
program e2_5; var
a,b,c,jc:real; begin
writeln('input a,b,jc:'); readln(a,b,jc); c:=sqrt(a*a+b*b-2*a*b*cos(pi*jc/180)); writeln(c:8:2); end.
2、 编写程序把一个四位整数3581颠倒成1853。
program e;
(★★★)
(★)(★)师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第8页
const n=3581; var
a,b,c,d:integer; begin writeln;
a:=n mod 10;
b:=(n div 10) mod 10; c:=(n div 100) mod 10; d:=n div 1000; writeln(a,b,c,d); end.
相关练习:任意输入一个正整数,颠倒输出该数。 program e; var
n:longint; begin
writeln; writeln('input a integer number:'); readln(n); repeat
write(n mod 10); n:=n div 10; until n=0; end.
3、 输入a、b、c三个数,打印出最大者。 program e; var
a,b,c:real; begin
writeln('input three number for a,b,c:'); readln(a,b,c);
if (a>b)and(a>c) then writeln(a);
else if (b>a)and(b>c) then writeln(b); else writeln(c); end.
4、 从键盘读入两个数,比较其大小,把大数置于x,小数置于y。请设计实现该功能的程序。
(★,If条件语句)(程序略)
5、 输入三个数,判断以这三个数为边能否组成一个三角形。若不能,则给出适当信息;若能,则
进一步判断它们构的是锐角三角形、直角三角形还是钝角三角形,并输出其特征(等边、等腰、直角、一般)、求其面积。
(★★,If条件语句)
(★,If条件语句)
(算法分析:对于判断是锐角、直角、还是钝角三角形,只需判断最大边的平方与其余两边的平方和的大小比较即可,小于则为锐角、等于则为直角、大于则为钝角。)
(测试数据:①1、2、3;②3、4、5;③)4、4、7;④5、5、5;答案:①No;②直角、面
师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第9页
积6.00;③钝角、等腰、面积6.78;④锐角、等边、面积10.83) program e; var
a,b,c,t,s,d,ja,jb,jc:real; begin
writeln('input three number for a,b,c:'); readln(a,b,c);
if a
if (a*a
if (a=b)and(b=c)and(c=a) then writeln('deng bian san jiao xing.') else if ((a=b)and(b<>c))or((a=c)and(c<>b))or((b=c)and(c<>a)) then writeln('deng yao san jiao xing.')
else if (a*a<>b*b+c*c) then writeln('yi ban san jiao xing.');
d:=(a+b+c)/2; s:=sqrt(d*(d-a)*(d-b)*(d-c)); writeln('s=',s:0:2); end
else writeln('NO!'); end.
6、 设我国目前的人口为11亿,且每年的增长率为1.5%。问多少年后,我国的人口会翻一番?
(★)
(答案:47)
program e2_22; var
i:integer; s:real; begin
writeln; s:=11; i:=0; while s<22 do
begin s:=s*(1.015); inc(i); end; writeln(i); end.
7、 Fibonacci数列问题:数列的头两个数分别是0和1,从第三个数开始,每个数皆为它的前两
个数之和,即:0,1,1,2,3,5,…,输出该数列的第50个数。 (答案:7778742049)
program e; {$N+,E+} var
i:integer;
x,y,z:extended; begin
writeln; x:=0; y:=1; write(x:20:0,y:20:0); for i:=3 to 50 do
begin z:=x+y; write(z:20:0); x:=y; y:=z; end;
(★★,循环语句)
师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第10页
end.
8、 编写程序求出下式中n的最大值:22+42+62+…+n2<1500。
(答案:18)
program e2_24; var
n,s:integer; begin writeln;
s:=0; n:=0; while s<1500 do
begin inc(n,2); inc(s,n*n); end; writeln(n-2); end.
9、 把一元的钞票换成一分、二分和五分的硬币(每种至少一枚),问有多少种兑换方法?(★★)
(答案:461)
program e2_29;
var
i,j,k,ans:integer; begin ans:=0;
for k:=1 to 19 do for j:=1 to 47 do for i:=1 to 93 do
if (k*5+j*2+i)=100 then inc(ans); writeln(ans); end. 10、
编写程序求最小正整数m、n(0 (★★★★) (算法:这类数字很大且有效数字位数很多(超出最多有效位数extended数据类型有效数字18位)的数字问题,一定要另辟蹊径寻找突破口,注意到此题只要求最后三位数字相同,则我最多保留最后四位有效数字即可进行判断。还请记住这样一个事实,如1989×1989=3956121,3956121×1989=7868724669,最后四位数字是“4669”,而我把3956121取其最后的四位数“6121”与1989相乘即6121×1989=12174669,最后四位数字也是“4669”,没有破坏最后四位有效数字的值,因此可以通过这种方法来编写此程序。) (答案:m=51; n=1); (★★,循环语句)