1、精品文档 程 序 设 计 题 选 1、求100以内最大的自然数N,使得从1开始的连续N个自然数的倒数之和小于3.5。 SET TALK OFF CLEAR S=0 FOR N=1 TO 100 S=(S+1)/N 改正:S=S+1/N IF S>=3.5 LOOP 改正:EXIT ENDIF ENDFOR ? N-1 SET TALK ON RETURN "运行结果:18" 2、 求100以内最小的自然数N,使得从1开始的连续N个自然数的倒数之和大于3.6。 SET TALK OFF CLEAR S=0
2、 FOR N=1 TO 100 S=S+1/N IF S<=3.6 改正:IF S>3.6 LOOP 改正:EXIT ENDIF ENDFOR ? N SET TALK ON RETURN "运行结果:21" 3、求50以内最大的自然数N,使得从102开始的连续N个偶数之和小于3000。 SET TALK OFF CLEAR S=0 FOR N=1 TO 50 A=100+2*N S=S*A 改正:S=S+A IF S>=3000 LOOP 改正:EXIT ENDIF ENDFO
3、R ? N-1 SET TALK ON RETURN "运行结果:23" 4、求50以内最小的自然数N,使得从102开始的连续N个偶数之和大于2000。 SET TALK OFF CLEAR S=0 FOR N=1 TO 50 A=102+2*N 改正:A=100+2*N S=S+A IF S>2000 LOOP 改正:EXIT ENDIF ENDFOR ? N SET TALK ON RETURN "运行结果:17" 5、 求出100以内使得算式1*2+2*3+…+N*(N+1)的值小于5000的最大的自然数N。 SET
4、 TALK OFF CLEAR S=0 FOR N=1 TO 100 A=N*(N+1) S=S+A IF S<5000 改正:IF S>5000 EXIT ENDIF ENDFOR ? N 改正:? N-1 SET TALK ON RETURN "运行结果:23" 6、 求出100以内使得算式1*2+2*3+…+N*(N+1)的值大于6000的最小的自然数N。 SET TALK OFF CLEAR S=0 FOR N=1 TO 100 A=N*(N+1) S=S+A IF S<=6000 改正:IF
5、 S>6000 LOOP 改正:EXIT ENDIF ENDFOR ? N SET TALK ON RETURN "运行结果:26" 7、求出100以内使得算式1+(1+2)+…+(1+2+…+N)的值小于1000的最大的自然数N。 SET TALK OFF CLEAR S=0 T=0 FOR N=1 TO 100 S=S+N T=T+S IF T<1000 改正:IF T>1000 EXIT ENDIF ENDFOR ? N 改正:? N-1 SET TALK ON
6、 RETURN "运行结果:17" 8、 求出100以内最大的奇数N使得算式(1-1/2)+(1/3-1/4)+…+(1/N-1/(N+1))的值小于0.68。 SET TALK OFF CLEAR S=0 FOR N=1 TO 100 STEP 2 A=1/N-1/(N+1) S=S+A IF S<0.68 改正:IF S>0.68 EXIT ENDIF ENDFOR ? N-2 S
7、ET TALK ON RETURN "运行结果:35" 9、某国在2000年时人口总数为1亿,若以每年3%的速度递增,试求出至少要到哪一年该国人口总数才会翻一翻。 SET TALK OFF CLEAR S=1 FOR N=2001 TO 2100 S=S*1.03 IF S=2 改正:IF S>=2 LOOP 改正:EXIT ENDIF ENDFOR ? N SET TAL
8、K ON RETURN "运行结果:2024" 9、设等比数列:1,2,4,8,…。求使得此数列的前N项之和大于100000的最小的自然数N。 SET TALK OFF CLEAR A=1 S=1 改正:S=0 FOR N=1 TO 100 S=S+A IF S>100000 EXIT ENDIF A=2+A 改正:A=A*2 ENDFOR ?
9、N SET TALK ON RETURN "运行结果:17" 10、设等比数列:1,2,4,8,…。求使得此数列的前N项之和小于2345678的最大的自然数N。 SET TALK OFF CLEAR A=1 S=0 FOR N=1 TO 100 S=S+A IF S>=2345678 EXIT ENDIF A=2+A 改正:A=A*2 ENDFOR
10、 ? N 改正:? N-1 SET TALK ON RETURN "运行结果:21" 11、求出45678的所有非平凡因子(即除1和它本身以外的约数)中是奇数的因子个数。 SET TALK OFF CLEAR A=45678 N=0 FOR B=3 TO A STEP 2 IF MOD(B,A)=0 改正:IF MOD(A,B)=0 N=N+1 ENDIF
11、 ENDFOR ? B 改正:? N SET TALK ON RETURN "运行结果:7" 12、求出20677和42067的最大公约数。 SET TALK OFF CLEAR A=20677 B=42067 FOR D=1 TO A IF MOD(A,D)=0 AND MOD(B,D)=0 MAX=B 改正:MAX=D ENDIF
12、 ENDFOR ? D 改正:MAX SET TALK ON RETURN "运行结果:713" 13、求前[1,100]内能被6或8整除的所有自然数的平方根的和(将第1位小数四舍五入,结果只保留整数)。 SET TALK OFF CLEAR S=0 FOR N=1 TO 100 IF MOD(N,6)=0 AND MOD(N,8)=0 改正:IF MOD(N,6)=0 OR MOD(N,8)=0
13、 S=SQRT(S+N) 改正:S= S+SQRT(N) ENDIF ENDFOR ? ROUND(S,0) SET TALK ON RETURN "运行结果:162" 14、求所有符合算式AB*BA=2701的最小的两位数AB(即A*10+B)。其中A、B是1~9之间的一位整数。 SET TALK OFF CLEAR FOR X=11 TO 99 A=X/10 改正:A=
14、INT(X/10) B=MOD(X,10) Y=10*A+B 改正:Y=10*B+A IF X*Y=2701 EXIT ENDIF ENDFOR ? X SET TALK ON RETURN "运行结果:37" 15、已知数列:1,2,4,7,11,16,…,其规律是相邻两项之差依次是1,2,3,4,5,…。试求出此数列中大于5000的最小的项。 SET TALK OFF CLEAR
15、 A=1 FOR N=0 TO 1000 A=A+N IF A>5000 LOOP 改正:EXIT ENDIF ENDFOR ? N 改正:? A SET TALK ON RETURN "运行结果:5051" 16、已知数列:1,2,4,7,11,16,…,其规律是相邻两项之差依次是1,2,3,4,5,…。试求出此数列中小于6000的最大的项。
16、SET TALK OFF CLEAR A=0 改正:A=1 FOR N=0 TO 1000 IF A+N<6000 改正:IF A+N>6000 EXIT ENDIF A=A+N ENDFOR ? A SET TALK ON RETURN "运行结果:5996" 17、已知数列{F(N)}:F(1)=1,F(2)=4,当N=3,4,5,…时,F(N)=3*F
17、N-1)-F(N-2)。试求出100以内最小的自然数N使得此数列的第N项大于87654321。 SET TALK OFF CLEAR DIMENSION F(100) F(1)=1 F(2)=4 FOR N=3 TO 100 F(N)=3*F(N-1)-F(N-2) IF F(N)<=87654321 改正:IF F(N)>87654321 LOOP 改正:EXIT ENDIF
18、 ENDFOR ? N SET TALK ON RETURN "运行结果:20" 18、求出100以内最大的自然数N,使得从1开始的连续N个自然数的立方之和小于999999。 SET TALK OFF CLEAR S=0 FOR N=1 TO 100 A=N*N*N S=S+A IF S<999999 改正:IF S<999999 EXIT ENDIF
19、 ENDFOR ? N 改正:? N-1 SET TALK ON RETURN 运行结果:44 19、一球从100米高处落至平地,并且连续多次再反弹再落下,假设每次反弹的高度都是前一高度的3/4倍,试求出最小的自然数N,使得此球从开始下落至第N次着地时在垂直方向所经过的总路程超过678米。 SET TALK OFF CLEAR H=100 S=0 改正:S=100 FOR N=2 TO 100 H=H*3/4 S=S+H
20、 改正:S=S+2*H IF S>678 EXIT ENDIF ENDFOR ? N SET TALK ON RETURN 运行结果:13 20、设有用26个字母表示的26个表达式:A=1,B=1/(A+1),C=1/(B+2),…,Z=1/(Y+25)。试求出这26个字母中其值小于0.1的字母个数。 SET TALK OFF CLEAR LETT=1 N=0 FOR K=1 TO 26 改正:FOR K=1 TO 25 LETT=1/LETT+K 改正:LETT=1/(LETT+K)
21、 IF LETT<0.1 N=N+1 ENDIF ENDFOR ? N SET TALK ON RETURN 运行结果:16 21、求所有符合算式AB*BA=3627的最大的两位数AB(即A*10+B)。其中A、B是1~9之间的一位整数。 SET TALK OFF CLEAR FOR X=11 TO 99 A=INT(X/10) B=MOD(X,10) Y=A*10+B 改正:Y=A+10*B IF X*Y=3627 EXIT ENDIF ENDFOR ? X
22、 改正:? Y SET TALK ON RETURN “运行结果:93" 22、设一个数列的前3项都是1,从第4项开始,每一项都是其前3项之和。试求出此数列的前25项中大于54321的项数。 SET TALK OFF CLEAR STORE 1 TO F1,F2,F3 N=0 FOR K=1 TO 25 改正:FOR K=4 TO 25 或 FOR K=1 TO 22 F=F1+F2+F3 IF F>54321 N=N+1 ENDIF F1=F2 F2=F3 F3=F1
23、 改正:F3=F ENDFOR ? N SET TALK ON RETURN “运行结果:5" 23、已知一个由分数组成的数列:1/2,3/5,8/13,21/34,…,其特点是:从其中第2个分数起,每个分数的分子都是前一分数的分子分母之和而其分母都是其分子与前一分数的分母之和。试求出此数列的前25项中其值大于0.618的项数。 SET TALK OFF CLEAR F1=1 F2=2 N=0 FOR K=1 TO 25 F=F1/F2 IF F>0.618 N=N+1 ENDIF F1=F2 改正:F1=F1+F2
24、 F2=F1 改正:F2=F1+F2 ENDFOR ? N SET TALK ON RETURN "运行结果:20" 24、回文指的是正读和反读都一样的一串字符,如121、1221。试求出[1421,4112]内所有回文数的和。 SET TALK OFF CLEAR S=0 FOR X=1421 TO 4112 A=X/1000 改正:A=INT(X/1000) B=INT((X-A*1000)/100) C=INT((X-A*1000-B*100)/10) D=X-A*1000-B*100
25、C*10 IF A=D AND B=C S=S*X 改正:S=S+X ENDIF ENDFOR ? S SET TALK ON RETURN "运行结果:74250" 25、求出[1234,6789]内中间两位数字之和等于首尾两位数字之积的数的个数。 SET TALK OFF CLEAR N=0 FOR X=1234 TO 6789 A=INT(X/1000) B=INT(X-A*1000)/100 改正:B=INT((X-A*1000)/100) C=INT(X-A*1000-B*10
26、0)/10 改正:C=INT((X-A*1000-B*100)/10) D=X-A*1000-B*100-C*10 IF B+C=A*D N=N+1 ENDIF ENDFOR ? N SET TALK ON RETURN "运行结果:175" 26、将大于1000且能被4和6中至少一个数整除的所有整数按从小到大顺序排列后,求前面20个数之和。 SET TALK OFF CLEAR S=0 K=0 X=1000 DO WHILE K<=20 改正:DO WHILE K<20 X=X+1 IF M
27、OD(X,4*6)=0 改正:IF MOD(X,4)=0 OR MOD(X,6)=0 S=S+X K=K+1 ENDIF ENDDO ? S SET TALK ON RETURN "运行结果:20610" 27、若一个自然数恰好等于某个整数的平方,则称此数为完全平方数。如144是完全平方数,因为它等于12的平方。求[1000,9999]内所有完全平方数的和。 SET TALK OFF CLEAR S=0 FOR X=1000 TO 3000 Y=SQRT(X) 改正: Y=INT(SQRT(X)) 或改下
28、一语句为 IF X=INT(Y)*INT(Y) IF X=Y*Y S=S+X ENDIF ENDFOR ? X 改正:? S SET TALK ON RETURN "运行结果:43539" 28、若一个自然数恰好是它的平方的末后几位数,则称此数为自同构数。如5和76都是自同构数,因为它们的平方分别是25和5776。求[2,99999]内所有自同构数之和。(提示:若X是M位同构数,则X的平方除以10的M次方的余数就是X) SET TALK OFF CLEAR S=0 FOR X=2 TO 99999 Y=X*X
29、 M=LEN(LTRIM(STR(X))) && 设X是M位数 IF MOD(Y,10*M)=X 改正:IF MOD(Y,10**M)=X S=S+X ENDIF ENDFOR ? Y 改正:? S SET TALK ON RETURN 运行结果:101114 29、求满足条件A*B=54321且使A+B的值最小的自然数对A、B中较大的一个数。(提示:设A<=B,当A越大时A+B越小) SET TALK OFF CLEAR C=54321 K=INT(SQRT(C)) FOR
30、 A=1 TO K B=INT(C)/A 改正:B=INT(C/A) IF A*B=C MAX=A 改正:MAX=B ENDIF ENDFOR ? MAX SET TALK ON RETURN "运行结果:953" 30、设A=123,B=541,求A/B的精确值中小数点后40位数字中数字1的个数。(提示:基于人工计算的思想) SET TALK OFF CLEAR A=123 B=541 N=0 FOR K=1 TO 40 A=A+0 改正:A=A*10 Q=INT(A)/B
31、 改正:Q=INT(A/B) IF Q=1 N=N+1 ENDIF A=MOD(A,B) ENDFOR ? N SET TALK ON RETURN "运行结果:3" 31、求出将十进制整数98765432等值转换为二进制形式表示后其中数字1的个数。(提示:模拟人工计算的“2除取余”法) SET TALK OFF CLEAR A=98765432 P=2 N=0 (增加一条) DO WHILE A>0 R=MOD(A,P) IF R=1 N=1 改正:N=N+1 ENDIF A=IN
32、T(A/P) ENDDO ? N SET TALK ON RETURN 运行结果:13 32、4087求出将十进制整数98765432等值转换为二进制形式表示后其中数字0的个数。(提示:模拟人工计算的“2除取余”法) SET TALK OFF CLEAR A=98765432 P=2 N=0 DO WHILE A=0 改正:DO WHILE A>0 R=MOD(A,P) IF R=0 N=P+1 改正:N=N+1 ENDIF A=INT(A/P) ENDDO ? N SET TALK ON RETURN 运行结果:14
33、33、 求出将十进制整数99887766554等值转换为十六进制形式表示后其中字母C的个数。(提示:模拟人工计算的“16除取余”法) SET TALK OFF CLEAR A=99887766554 P=16 N=0 DO WHILE A=0 R=MOD(A,P) IF R=11 改正:IF R=12 N=N+R 改正:N=N+1 ENDIF A=INT(A/P) ENDDO ? N SET TALK ON RETURN "运行结果:2" 34、对自然数A、B、C,若A
34、C}为一组勾股弦数,其中A、B、C分别称为勾、股、弦。试求出弦为25000的勾股弦数组的个数。 SET TALK OFF CLEAR C=25000 N=1 改正:N=0 FOR A=1 TO C B=INT(SQRT(C*C-A*A)) IF A*A+B*B=C*C 改正:IF A*A+B*B=C*C AND A
35、 36、T TALK OFF
CLEAR
N=0
FOR X=-99 TO 99
Y=INT((3*X-1)/7)
IF 3*X-7*Y=1 OR ABS(Y)<40 改正: IF 3*X-7*Y=1 AND ABS(Y)<40
N=N+X 改正:N=N+1
ENDIF
ENDFOR
? N
SET TALK ON
RETURN
"运行结果:26"
41、求方程3X-7Y=1在条件|X|<100且|Y|<40下的所有整数解的|X|+|Y|的最大值。
SET TALK OFF
CLEAR
MAX=140 改正:M 37、AX=0
FOR X=-99 TO 99
Y=INT((3*X-1)/7)
Z=ABS(X+Y) 改正:Z=ABS(X)+ABS(Y)
IF 3*X-7*Y=1 AND ABS(Y)<40 AND MAX>Z 改正:IF 3*X-7*Y=1 AND ABS(Y)<40 AND MAX 38、OR I=100 TO 1000
F=1
FOR J=2 TO I 改正:FOR J=2 TO I-1
IF MOD(I,J)=0
F=0
EXIT
ENDIF
ENDFOR
IF F=1
N=I
K=K+I 改正:K=K+1
IF K=10
EXIT
ENDIF
ENDIF
ENDFOR
? N
RETURN
运行结果:149
43、对自然数A、B、C,若A






