西城区1999年中小学计算机
程序设计竞赛小学BASIC组试题 一. 某人的生日的月份乘以31, 日期乘以12, 其和为 170, 编程求他的生日为何月何日, 输出格式为: 月-日. ( 10分, 存盘文件名为T1 )
CLS
FOR a = 1 TO 12
FOR b = 1 TO 31
IF a * 31 + b * 12 = 170 THEN PRINT a; "-"; b
NEXT b, a
END
二. 将3,4,5,6,7五个数字放在五边形 ABCDE 的五个顶点上, 这样从顶点A开始沿顺时针方向和逆时针方向从顶点取出数字, 可以得到不同的两个五位数, 要求这两个五位数都能被 7 整除,问这五个数字应如何摆放? ( 10分, 存盘文件名为T2 )
( 1 )
CLS
DIM a(5), b(5)
FOR i = 1 TO 5
a(i) = i + 2
NEXT i
FOR a = 1 TO 5: b(1) = a
FOR b = 1 TO 5: b(2) = b
FOR c = 1 TO 5: b(3) = c
FOR d = 1 TO 5: b(4) = d
e = 15 - a - b - c - d: b(5) = e
IF a * b * c * d * e <> 120 THEN 10
r = a(b(1)): l = r
FOR i = 2 TO 5
r = r * 10 + a(b(i))
l = l * 10 + a(b(7 - i))
NEXT i
IF r / 7 <> INT(r / 7) OR l / 7 <> INT(l / 7) THEN 10
FOR i = 1 TO 5
PRINT CHR$(64 + i); a(b(i)),
NEXT i
10 NEXT d, c, b, a
END
( 2 )
CLS
FOR a = 3 TO 7
FOR b = 3 TO 7
IF a = b THEN 40
FOR c = 3 TO 7
IF c = a OR c = b THEN 30
FOR d = 3 TO 7
IF d = a OR d = b OR d = c THEN 20
FOR e = 3 TO 7
IF e = a OR e = b OR e = c OR e = d THEN 10
r = 10000 * a + 1000 * b + 100 * c + 10 * d + e
l = 10000 * a + 1000 * e + 100 * d + 10 * c + b
IF r / 7 <> INT(r / 7) OR l / 7 <> INT(l / 7) THEN 10
PRINT "A="; a; " B="; b; " C="; c; " D="; d; " E="; e
10 NEXT e
20 NEXT d
30 NEXT c
40 NEXT b, a
END
三. 编程判断1999是否为质数, 用yes/no回答,并求出比1999大且离1999最近的N个不同质数,N(N<10)由键盘输入. (质数是指这样的自然数, 它除了1和自身以外不能被其他自然数整除) ( 15分, 存盘文件名为T3 )
CLS
x = 1999: n = 0
GOSUB 100
PRINT x; : IF k = 1 THEN PRINT "no" ELSE PRINT "yes"
10 x = x + 2
GOSUB 100
IF k = 0 THEN PRINT x: n = n + 1
IF n < 5 THEN 10
END
100 k = 0
FOR i = 3 TO SQR(x) STEP 2
IF x / i = x \ i THEN k = 1: GOTO 110
NEXT i
110 RETURN
四. 从键盘输入真分数的分子A和分母B,编程判断这个真分数是否可以表示为两个自然数的倒数和; 如果可以,就输出这两个自然数,(不止一个解答的只给出一个即可) 否则输出"NO".
例如: 输入 A, B= 5, 6
输出 N1, N2= 2, 3 ( 15分, 存盘文件名为T4 )
( 1 )
CLS
10 INPUT "A="; a
IF a < 1 OR a <> INT(a) THEN 10
20 INPUT "B="; b
IF b <= a OR b <> INT(b) THEN 20
k = 0
FOR x = 2 TO (b / a) * 2
y = x * b / (a * x - b)
IF y = INT(y) AND y > 0 THEN PRINT "N1, N2="; x; ","; y: k = k + 1
NEXT x
IF k = 0 THEN PRINT "NO"
END
( 2 )
CLS
10 INPUT "A="; a: IF a < 1 OR a <> INT(a) THEN 10
20 INPUT "B="; b: IF b <= a OR b <> INT(b) THEN 20
k = 0: c = (b / a) * 2: x = 1
30 x = x + 1: IF x > c THEN 40
IF a / b < 1 / x THEN 30
y = x * b: z = a * x - b
IF y / z = INT(y / z) THEN k = k + 1: PRINT "N1, N2="; x; ","; y / z
GOTO 30
40 IF k = 0 THEN PRINT "NO"
END
五. 赵,王,李,关四位教师在操场进行一场羽毛球双打比赛,同学们谈论这四位老师的年纪:
(1) 关老师比李老师年轻;
(2) 赵老师比他的两个对手年龄都大;
(3) 关老师比`他的伙伴年龄大;
(4) 赵老师与王老师不同时为最大和最小.
请你根据上面几点,试编程分析四位老师年龄的大小顺序,以及谁与谁是比赛搭档.编程时用Z,W,L,G分别表示赵,王,李,关四位教师,输出时按年龄从大到小的顺序排列; 用两个减号"--"分开4位教师表示双打安排,例如 ZW--LG 表示赵王对李关.
( 20分, 存盘文件名为T5 )
CLS
DIM a(9): t = 1: s = 0: x$(1) = " D=4": x$(2) = " D=8"
FOR i = 1 TO 9
s = s + i: t = t * i
NEXT i
FOR w = 1 TO 2
READ d: a(4) = d
k = 0: PRINT "("; w; ") "; x$(w)
FOR a = 1 TO 7: a(1) = a
FOR b = 1 TO 9: a(2) = b
FOR c = 1 TO 9: a(3) = c
p = 2 * d \ 10: h = 2 * d MOD 10: a(8) = h
FOR e = 6 - a - 1 TO 8 - a: a(5) = e
FOR f = 1 TO 9: a(6) = f
FOR g = 1 TO 9: a(7) = g
i = c + g + p: a(9) = i
IF a + b + c + d + e + f + g + h + i <> s THEN 10
IF a * b * c * d * e * f * g * h * i <> t THEN 10
x = 1000 * a + 100 * b + 10 * c + d
y = 1000 * e + 100 * f + 10 * g + d
z = 1000 * h + 100 * e + 10 * i + h
IF x + y <> z THEN 10
IF w = 1 AND (x / 3 <> x \ 3 OR y / 3 <> y \ 3) THEN 10
k = k + 1
FOR v = 1 TO 9
PRINT CHR$(64 + v); "="; a(v); " ";
NEXT v: PRINT : GOTO 20
10 NEXT g, f, e, c, b, a
PRINT
20 NEXT w
IF k = 0 THEN PRINT "NO"
END
DATA 4,8
六. 用 9 个字母ABCDEFGHI 分别表示 1-9 阿拉伯数码中的某一个(没有重复).
(1) 当D=4时,下列加法算式成立,且被加数 ABCD 和加数 EFGD 均是3的倍数,编程求这几个字母分别代表几?
(2) 当D=8时,有没有符合要求的解答,若有输出各个字母分别代表几; 若没有则输出 "NO".
A B C D
+ E F G D
-------------
H E I H ( 20分, 存盘文件名为T6 )
CLS
DIM a(9): t = 1: s = 0: x$(1) = " D=4": x$(2) = " D=8"
FOR i = 1 TO 9
s = s + i: t = t * i
NEXT i
FOR w = 1 TO 2
READ d: a(4) = d
k = 0: PRINT "("; w; ") "; x$(w)
FOR a = 1 TO 7: a(1) = a
FOR b = 1 TO 9: a(2) = b
FOR c = 1 TO 9: a(3) = c
p = 2 * d \ 10: h = 2 * d MOD 10: a(8) = h
FOR e = 6 - a - 1 TO 8 - a: a(5) = e
FOR f = 1 TO 9: a(6) = f
FOR g = 1 TO 9: a(7) = g
i = c + g + p: a(9) = i
IF a + b + c + d + e + f + g + h + i <> s THEN 10
IF a * b * c * d * e * f * g * h * i <> t THEN 10
x = 1000 * a + 100 * b + 10 * c + d
y = 1000 * e + 100 * f + 10 * g + d
z = 1000 * h + 100 * e + 10 * i + h
IF x + y <> z THEN 10
IF w = 1 AND (x / 3 <> x \ 3 OR y / 3 <> y \ 3) THEN 10
k = k + 1
FOR v = 1 TO 9
PRINT CHR$(64 + v); "="; a(v); " ";
NEXT v: PRINT : GOTO 20
10 NEXT g, f, e, c, b, a
PRINT
20 NEXT w
IF k = 0 THEN PRINT "NO"
END
DATA 4,8
七. 随机产生出 100 个 100 以内的全部没有重复的自然数, 按产生的先后顺序逐一放入 10*10 方格中, 输出此 10*10 数阵,输出时每行两数之间相隔 5 个字符的位置. 假定方格中有两个自然数 A和B,且 A问题 1. 由键盘输入 A,B, 试统计从 A 经过 A+1, A+2,....到 B 所经过的方格总数(要求自然数 A,B<100, 且 A. . . . . . .
... 24 3 91 34 65 5 .....
... 6 71 44 13 93 28 .....
... 12 32 77 45 4 66 .....
. . . . . . .
问题 2. 输入自然数 M (M<100), 请你找到自然数 C,D (C,D均小于100 且C程序的第一条语句必须使用: RANDOMIZE TIMER ( 30分, 存盘文件名为T7 )
CLS
RANDOMIZE TIMER
DIM a(100), b(10, 10), s(100), c$(100), d$(100), px(100), py(100): p = 1E+38
10 INPUT "A,B="; a, b
IF a < 1 OR a <> a \ 1 OR b <= a OR b <> b \ 1 OR b > 99 THEN 10
20 INPUT "M="; m: IF m < 1 OR m > 99 OR m <> m \ 1 THEN 20
FOR i = 1 TO 100
30 a(i) = INT(RND * 100 + 1)
FOR j = 1 TO i - 1
IF a(i) = a(j) THEN 30
NEXT j, i
FOR i = 1 TO 10
FOR j = 1 TO 10
k = k + 1: b(i, j) = a(k): PRINT TAB(5 * j); a(k);
NEXT j, i: PRINT : PRINT
PRINT " ( 1 )"; : s = 1
GOSUB 100: PRINT " S="; s: PRINT
PRINT " ( 2 )";
FOR x = 1 TO 100 - m
a = x: b = m + x: GOSUB 200
s = 1: GOSUB 100
s(x) = s: px(x) = x: py(x) = b
NEXT x
FOR i = 1 TO 100 - m
IF s(i) < p THEN p = s(i): pc$ = c$(i): pd$ = d$(i): px = px(i): py = py(i)
NEXT i
PRINT " C="; px; "("; pc$; ")", "D="; py; "("; pd$; ")", "S="; p
END
100 c = a + 1
FOR i = 1 TO 10
FOR j = 1 TO 10
IF b(i, j) = a THEN ai = i: aj = j
IF b(i, j) = c THEN ci = i: cj = j
NEXT j, i
s = s + ABS(ai - ci) + ABS(aj - cj)
a = a + 1: IF a < b THEN 100
RETURN
200 FOR i = 1 TO 10
FOR j = 1 TO 10
IF b(i, j) = a THEN c$(x) = STR$(i) + " , " + STR$(j)
IF b(i, j) = b THEN d$(x) = STR$(i) + " , " + STR$(j)
NEXT j, i
RETURN