(信息学奥赛辅导)程序设计试题汇编(答案)(3)

2019-02-15 11:14

师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第11页

program e; var

m,n,i,j:integer; x,y,a,b:longint; begin writeln;

for m:=2 to 60 do for n:=1 to m-1 do begin

x:=1; y:=1;

for i:=1 to m do begin x:=x mod 10000; x:=x*1989; a:=x mod 1000; end; for j:=1 to n do begin y:=y mod 10000; y:=y*1989; b:=y mod 1000; end; if a=b then writeln('m=',m,' n=',n); end; end. 11、

编写程序提示用户输入一系列整数,用0作结束标志,统计其中有多少个正数。(★)

program e; var

count,x:integer; begin

writeln; writeln('input integer number(0--end):'); count:=0; repeat read(x);

if x>0 then inc(count); until(x=0);

writeln('count=',count); end. 12、

求自然常数e?1111?????的值。(提示:0!=1,1!=1) 0!1!2!n! (★

★)

(1) 直到第50项;(2)直到最后一项小于10-5。 (答案:(1)2.71828182845905E+0000;

(2)2.71828152557319E+0000)

(备注:第2小问程序略,只须将更改语句“until (1/s)<1E-5;”即可求的解答) program e2_35;

{$N+} var

i,count:integer; e,s:extended; begin

e:=1; count:=0; repeat

inc(count); s:=1;

for i:=1 to count do s:=s*i; e:=e+1/s; until count=50;

师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第12页

writeln(e); end. 13、

三齐王点兵的故事。相传三齐王韩信才智过人,从不直接清点自己军队的人数,只是让

士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了(不超过100人)。输入三次排尾的人数,输出总人数。 ★)

program e2_36; var

a,b,c,i:integer; begin

writeln('shu ru p3(0~2),p5(0~4),p7(0~6) de wei shu:'); readln(a,b,c);

for i:=100 downto 1 do

if (i mod 3=a)and(i mod 5=b)and(i mod 7=c) then writeln(i); if i=1 then writeln('No answer!'); end. 14、

编写程序,计算N!以十进制数形式表示的数中最右的非零数字,并找出在它右边有几

(★★★)

(★

个零。例如12!=1×2×3×…×12=479001600。因此12!的右边有2个零。

(提示:碰到5、52、53、54…才会出现末尾是零,所以1000!末尾零的个数为:

(1000 div 5)+(1000 div 52)+(1000 div 53)+(1000 div 54)=249)

(下面的程序没采用上面的算法,采取另一种算法实现了这一程序,显然上面的算法效率高) (程序算法:只需提供末尾几位有效数字即可,我采取提供四位有效数字相乘) program I_11; var

s:longint; i,d:integer; begin writeln;

d:=0; s:=1;

for i:=1 to 1000 do begin s:=s*i;

if (s mod 1000 =0) then begin s:=s div 1000; d:=d+3; end; if (s mod 100 = 0) then begin s:=s div 100; d:=d+2; end; if (s mod 10 = 0) then begin s:=s div 10; d:=d+1; end; s:=s mod 10000; end;

writeln; write(d); end.

师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第13页

15、 编写程序,输出“字母塔”。以此类推共26层。 A (★★)

ABA ABCBA ……………

program e2_40; var

i,j:integer; begin writeln;

for i:=1 to 26 do begin

for j:=1 to 26-i do write(' '); for j:=1 to i do write(chr(64+j));

for j:=i-1 downto 1 do write(chr(64+j)); writeln; end; end.

第4章 数组类型

例题部分:

1、 输入10个整数,把这10个数按从小到大的顺序排列。

(冒泡法排序和选择法排序两种方法) 冒泡法排序:

program e1; const n=10; var

a:array[1..10] of integer; i,j,t:integer; begin

writeln('input ',n,' integer number:'); for i:=1 to n do read(a[i]); for i:=1 to n-1 do for j:=1 to n-i do

if a[j]>a[j+1] then begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t; end; for i:=1 to n do write(a[i]:5); end.

2、 折半查找。(二分法查找)

(★★)

(★★)

3、 旅馆里有一百个房间,从1到100编了号。第一个服务员把所有的房间门都打开了,第二个

师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第14页

服务员把所有编号是2的倍数的房间“相反处理”,第三个服务员把所有编号是3的倍数的房间作“相反处理”,……,以后每个服务员都是如此。问第100个服务员来过后,哪几扇门是打开的。(所谓“相反处理”是:原来开着的门关上,原来关上的门打开。)

(★★)

(提示:对于任何一个编号,例如8,它的因子只有1、2、4、8,并且成对出现,当此数的因子数为偶数个时将被关上,当此数的因子数为奇数个时才会被打开。考虑到因子成对出现的情况,因此只有平方数的因子是奇数个的,所以门被打开的只能是平方数的房间,如1,4等) 4、 编写程序把任意十进制整数转换成二进制整数。

(★★)

5、 所谓“幻方”,是一个行、列为奇数的方阵,把1~n2这n2个不同的数放入方阵中,使方阵的每

行、每列和每个对角线上的元素的和全部相等。下面给出幻方的一种排列方法: (1) 先把1放在第一行的中间位置; (2) 下一个数放在上一个数的右上方;

(3) 若右上方已超出方阵的第一行,则下一个数放在下一列的最后一行上; (4) 若右上方已超出方阵的最后一列,则下一个数放在上一行的第一列上;

(5) 若右上方已经有数,或右上方已超出方阵的第一行最后一列,则下一个数放在上一个

数的正下方。

编写程序,对输入小于15的n,打印出相应的幻方。

(★★★)

6、 在一个字符数组LET中形成由A开始的连续26个大写字母构成的字串,并将其倒置后仍放

在LET中。

7、 随机输入一个长度不超过255的字符串,将其倒置后输出。

8、 随机输入一些国家的英文名字,以end作为输入结束标志,按字母顺序排序后输出。 9、 求n个字符串的最长公共子串,n<20,字符长度不超过255。

师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第15页

例如n=3,由键盘依次输入三个字符串为: what is local bus? Name some local bus.

Local bus is high speed I/O bus close to the processor. 则最长公共子串为“local bus。” 10、

文本的整版。编写一个程序,从键盘以任意的方法输入句子,然后打印出来。打印时每

行宽度必须为n个字符。如果一行的最后一个单词超出了本行n个字符的范围,则应把它移到下一行去。输入一个句子测试你的程序。

习题部分:

1、 输入n个整数,请找出最小数所在的位置,并把它与第一个数对调。

(★)

program e4_2; var

a:array[1..10]of integer; i,t,y:integer; begin

writeln('input ten integer number:'); for i:=1 to 10 do read(a[i]); t:=a[1];

for i:=2 to 10 do if a[i]

if a[i]=t then begin writeln('the min number is ',i,'th'); a[i]:=a[1]; a[1]:=t; end; for i:=1 to 10 do write(a[i]:8); end.

2、 用边排序边合并的方法把两个有序数列合并为一个新的有序数列,不得先合并再重新排序。

(★★)

(测试数据:这里a组数据共8个:1 1 3 6 6 7 9 10; program e4_3; var

a:array[1..8] of integer; b:array[1..5] of integer; c:array[1..13] of integer; i,j,k,m,n:integer; begin

b组数据共5个:0 1 2 3 4)


(信息学奥赛辅导)程序设计试题汇编(答案)(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:75t锅炉运行规程

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: