师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第16页
writeln('input 8 integer number of square arrayA:'); for i:=1 to 8 do read(a[i]);
writeln('input 5 integer number of square arrayB:'); for i:=1 to 5 do read(b[i]);
j:=1; k:=1; m:=a[j]; n:=b[k]; for i:=1 to 13 do begin
if m c[i]:=m; inc(j); m:=a[j]; if j=9 then m:=maxint; end else begin c[i]:=n; inc(k); n:=b[k]; if k=6 then n:=maxint; end; end; for i:=1 to 13 do write(c[i]:4); end. 3、 将一个数插入到有序的数列中,插入后数列仍然有序。 (测试数据:有序数组为1 1 3 6 6 7 9 10; program e4_4; var i,j,n:integer; flag:boolean; a:array[1..9] of integer; begin writeln('input 8 integer square number:'); for i:=1 to 8 do read(a[i]); writeln('input a integer number to insert:'); readln(n); flag:=false; i:=1; repeat if a[i]>n then flag:=true else inc(i); until flag=true; for j:=9 downto i+1 do a[j]:=a[j-1]; a[i]:=n; for i:=1 to 9 do write(a[i]:4); end. 4、 有N个无序的数存放在A数组中,请将后面相同的数删成只剩下一个,并输出经过删除后的 数列。 (★★) (★★) 待插入数为5) (测试数据:数列为1 3 5 3 7 5 3 1; program e4_5; var a:array[1..8] of integer; i,j,n:integer; begin 答案:1 3 5 7) 师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第17页 writeln('input 8 integer number:'); for i:=1 to 8 do read(a[i]); for i:=2 to 8 do for j:=1 to i-1 do if a[i]=a[j] then a[i]:=maxint; for i:=1 to 8 do if a[i]<>maxint then write(a[i]:4); end. 5、 有N个人排队到R个相同的水龙头去打水,他们装满各自水桶的时间T1、T2、…、TN为整 数且互不相等,应如何安排他们打水的顺序才能使他们花费的总时间最少?(花费的总时间等于每个花费时间的总和) 6、 求一个五阶方阵中某个元素的位置:它在行上是最小的,在列上也是最小的,如果没有请输出 “NO FIND!。” (★★★) (分析:整个矩阵中的最小值,当然也是所在行和所在列的最小值,因此肯定能找到这样的数)测试数据: 11 5 3 17 13 4 9 22 16 10 答案:2、1、3、6 2 23 21 24 19 7 1 18 12 20 8 25 15 6 14 program e; var i,j,x,y:integer; minx:integer; a:array[1..5,1..5] of integer; begin writeln; writeln('input number(5*5):'); for i:=1 to 5 do for j:=1 to 5 do read(a[i,j]); for i:=1 to 5 do begin minx:=a[i,1]; x:=i; y:=1; for j:=1 to 5 do if a[i,j] if a[j,y] if j=5 then writeln('the number is ',minx,'[',x,']','[',y,']'); 师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第18页 end; end. 第5章 过程与函数 例题部分: 1、 编程求:1!+3!+5!+7!+9!+11!。 2、 求数字的乘积根。一个正整数的数字的乘积N的定义是:这个整数中非零数字的乘积。例如, 整数999的数字乘积为9×9×9,即729。729的数字乘积为7×2×9,即126。126的数字乘积为1×2×6,即12。12的数字乘积为1×2,即2。一个正整数的数字乘积根N是这样得到的:反复取该整数的数字乘积,直到得到一位数字为止。例如,在上面的例子中数字的乘积根是2。编写一个程序,输入一个正整数(长度不超过200位数字),输出计算其数字乘积根的每一步结果。 3、 汉诺(Hanoi)塔问题。设有n个大小不等的中空圆盘,按照从小到大(尺寸和序号)的顺序 叠套在立柱A上。另有两根立柱B和C,如图所示。问题要求把全部圆盘从A柱(源柱)移到C柱(目标柱)。移动过程中可借助B柱(中间柱)。移动时有如下要求: (1) 一次只能移动一个圆盘; (2) 不允许把大盘放在小盘上边; (3) 可使用任意一根立柱暂存圆盘。 A B C 师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第19页 4、 把一个十进制整数转化为K进制数(K≤10)。 5、 八皇后问题:把八个皇后摆在8×8国际象棋棋盘格子内,使它们互不捕获对方。换言之,在 任何一行、一列或一条对角线上,仅能放置一个皇后。这一问题是由19世纪著名数学家高斯(Gauss)于1850年首先提出的。(答案共有92种解答) 6、 已知:切比雪夫多项式如下: (提示:运用递归函数计算) (n?0)?1?Tn(x)??x(n?1) ?2xT(x)?T(x)(n?2)n?1n?2?对给定的不同的正整数,它是一些阶数不同的多项式,编程计算第n个多项式的值。 习题部分: M1、 编写一递归函数说明,用以计算组合数C(M,N)。(即CN) 2、 两个人玩井字游戏,在井字进分的九个空位上轮流画O或*,谁最先使自己的三个O或三个* 在一条直线上,谁就赢了。编写程序检查每一步是否走得正确,并告诉谁是胜利者。 第6章 集合与记录类型 例题部分: 1、 七段数码管问题。 2、 任意给出一个正整数N,找一个正整数M,使得N*M的值的数字由0、1、…、C(C≤9)组 成,且这些数字至少出现一次。编写程序在整数范围内找出满足条件的最小M。若没有给出信息,则输出“No find!。 ” 例如:C=3、N=65时,M=48,65×48=3210; C=8、N=125时,“No find!。 ” 师大附中 信息学奥林匹克竞赛辅导——程序设计试题答案部分 第20页 (以下程序设计试题来自《计算机二级考试复习指南》) 1. 数列??e(1)?e(2)?1,?e(n)?(n?1)?e(n?1)?(n?2)?e(n?2)(n?2)称为e数列, 每一个e(n)(n=1,2,…)称为e数。求[1,30000]之内: (1) 最大的e数;(2)e数的数目。 (该数列前面几项为1、1、3、11、53、……; 答案:①16687; ②8) program e; var a,b,c,n:longint; begin writeln; n:=3; a:=1; b:=1; repeat c:=(n-2)*a+(n-1)*b; a:=b; b:=c; inc(n); until c>30000; writeln('maxe=',a,' count=',n-2); end. 10002. 计算并输出:S??1i?(i之值(精确到小数点后第5位)。 i?1?1)(答案:0.99900) program e; var i:integer; s,n:real; begin writeln; s:=0; for i:=1 to 1000 do begin n:=i; s:=s+1/(n*(n+1)); end; writeln(s:0:5); end. 3. 已知??F(0)?F(1)?F(2)?1?F(N)?F(N?1)?2F(N?2)?F(N?3)(N?2),求: (1) F(50);(2)F(0)+F(1)+……+F(50)。 (答案:①212101; ②-97262) program e; var i,a,b,c,d,s:longint; begin writeln; a:=1; b:=1; c:=1; s:=3; for i:=3 to 50 do begin d:=a-2*b+c; s:=s+d; a:=b; b:=c; c:=d; write(d:8); end; (★★) (★) (★★)