第一届(1995年)NOIP联赛普及组初赛试题(附答案)

发布时间 : 星期四 文章第一届(1995年)NOIP联赛普及组初赛试题(附答案)更新完毕开始阅读

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

联系合同范文客服:xxxxx#qq.com(#替换为@)