NOI’95 “同创杯”全国青少年信息学(计算机)奥林匹克竞赛
分区联赛初赛试题(初中组) 竞赛用时:2小时
答 题 要 求
一、全部试题答案均应写在答卷纸上,写在试卷纸上一概无效。 二、算法描述中,可以使用下列过程、函数或算符: (1)算术运算:+,-,×,/,DIV,MOD
整数除(DIV):是取二整数相除的商的整数部分。如:11 DIV 2 = 5
取模(MOD):是取二整数相除的余数。 如:11 MOD 2 = 1
(2)关系运算:>,<,=,<>,>=,<=
(3)逻辑运算:AND,OR,NOT
(4)函数:
ABS(X):求X的绝对值。如:ABS(3.14)=3.14 ABS(-3.14)=3.14
SQR(X):求X的平方值。如:SQR(3)=9 SQR(-15)=225
SQRT(X):求X的平方根值。如:SQRT(9)=3 SQRT(225)=15
TRUNC(X):去掉X的小数部分:如TRUNC(6.3)=6 TRUNC(-7.9)=-7
ROUND(X):函数值是小数四舍五入后的整数值。
如:ROUND(3.14)=3 ROUND(3.16)=4 ROUND(-3.14)=-4
ORD(X):函数值是字符在ASCII码中的序号。
如:ORD(‘A’)=65 ORD(‘B’)=66 ORD(‘Z’)=90 ORD(‘0’)=48
CHR(X):X表示ASCII码中的序号,函数值是该序号代表的字符值。
如:CHR(48)=’0’ CHR(65)=’A’ CHR(90)=’Z’
(5)过程:
DEC(A,[X]):变量递减,A为有序变量,X缺省时为1。
INC(A,[X]):变量递增,A为有序变量,X缺省时为1。
一、基础题:
<1> 执行①C>DIR 命令后,屏幕上显示如下画面:
FORMAT COM 12145 SYS COM 4878 PUC BAT 126 XCOPY EXE 11216
4 FILE(S) 123456 bytes free 接着又顺序执行了如下几条DOS 命令:
② C>DIR> DF.TXT //表示将列表显示的目录作为文件写盘 // ① C>TYPE DF.TXT ② C>DIR
试问:执行命令③和④ 在屏幕上显示的结果是否与①相同?
<2> 请将以下程序段表示的计算公式写出来(假设X的值已给出)
E:=1 ;
1
A:=1 ;
FOR N:=1 TO 10 DO A:=A*X/N ; E:=E+A ; ENDFOR ; 写出所表示的公式。
<3> 列举一个算法,使算法的解能对应相应的问题。
例如,设问题为:学生答题,答对一题可得10分,答错一题则要扣去5分,输入答对的题数(M)与答错的题数(N),求最后得分(S)是多少? 列举出相应算法为:
X:=10; Y:=5;
READ(M,N); S:=X*M-Y*N;
现有以下问题:用五角钱换成5分、2分与1分的硬币,可有多少种换法? 请列出该问题的算法。
<4> 已知如下N*(N+1)/2个数据,按行的顺序存入数组A[1],A[2],??中:
a11
a21 a22
a31 a32 a33 ??
an1 an2 an3 ?? ann
其中:第一个下标表示行 第二个下标表示列。 若:aij(i≥j,j,i=1,2,??n)存贮在A[k]中,试问: (1) k和i,j之间的关系如何表示?
(2) 给定k值(k≤n*(n+1)/2)后,写出能决定相应的i,j值的算法。
<5> 有红、黄、黑、白四色球各一个,放置在一个内存编号为1、2、3、4四个格子的盒中,
每个格子放置一只球,它们的顺序不知。甲、乙、丙三人猜测放置顺序如下: 甲:黑编号1,黄编号2; 乙:黑编号2,白编号3; 丙:红编号2,白编号4 。
结果证明甲乙丙三人各猜中了一半。
写出四色球在盒子中放置情况及推理过程。
二、根据根据题目要求,补充完善以下伪代码程序:
<1> 求出所有满足下列条件的二位数:将此二位数的个位数字与十位数字进行交换,可得
到一个新的数,要求新数与原数之和小于100。 程序要求:每行输出6个满足条件的数。
[算法提要] 分解每一个二位数,然后重新组成一个新数,当满足条件时,用计数器来统计个数。
2
程序: K := 0;
FOR i := ______①____ TO 99 DO
X := _____②_____; Y := _____③_____; J := x * 10 + y;
IF ____④_____ THEN K := k + 1; Write(I : 4);
______⑤_____ THEN WRITELN; ENDIF ENDFOR;
<2> 找出小于33的6个正整数,用这些整数进行加法运算,使得包括原来的整数在内能组
成尽可能多的不同整数。
例如:用2,3,5这三个数能可组成下面的数 2, 3, 5
2 + 3 = 5, 但5已经存在
2 + 5 = 7, 3 + 5 = 8, 2 + 3 + 5 = 10 所以用2,3,5能组成6个不同的数。
程序要求:输出所选的这6个数,以及能组成不同整数的个数。
[算法提要]:选择的这6个数,用来组成数时应该尽可能不重复,引入数组A保存找
出的这6个整数。
程序: A[1] := 1; t := 0; For i := 2 to 6 do
_____①____; for j := 1 to i - 1 do
s := ______②_______; ENDFOR;
a[i] := _______③_______; ENDFOR;
FOR i:=1 TO 6 DO T := ______④______ WRITE(a[i], ' '); ENDFOR;
Writeln('能组成不同整数的个数:', t) End.
<3> 求出2~1000之间长度最长的、成等差数列的素数(质数)。
例如:在2~50之间的全部素数有
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47 其中公差为1的素数数列为2, 3,其长度为2 公差为2的素数数列为3, 5, 7,其长度为3 ??
程序要求:输出满足条件的素数数列。
[算法提要]:首先用筛选法求出此范围内的全部素数,存放在数组B中,然后用2个
变量i,j,逐步求出满足条件的素数数列。
3
程序: Max := 0; num := 1000; For i := 2 to num do b[i] := i; ENDFOR
For i := 2 to ______①______ do If _____②_____ then
k := i + i; While k <= num do B[k] := 0; K := k + i ENDWHILE; ENDIF; ENDFOR;
For i := 2 to num - 1 do
If _______③_________ then J := 1;
D[j] := b[i];
For i1 := _________④____________ do If b[i1] <> 0 then
Delta := _______⑤_______; k := delta;
While (i+k<=num)and _____⑥______ do j := j + 1; d[j] := i + k; k := k + delta ENDWHILE;
If j > max then begin Max := j;
C :=d //数组D的每个元素值 分别送放数组C的相应 元素中去// ENDIF; J := 1 ENDIF; ENDFOR; ENDIF; ENDFOR;
writeln('The max length is: ', max); write('The string is: ');
for i := 1 to max do write(c[i],' '); writeln ENDFOR;
<4> 求出二个整形数组错位相加的最大面积。
4