一、改错题
1.求[10,1000]内所有能被被7和9中至少一个数整除的整数之个数。 * skgc1.prg set talk off clear s=0
&&s=0改为n=0 for x=10 to 1000
if mod(x,7)=0 and mod(x,9)=0 && and改为or
n=n+x
&& n=n+x改为n=n+1
endif endfor ? x
&& x改为n set talk on return
&& 结果为: 236
2.求[10,1000]内所有能同时被7和9整除的整数之和。 set talk off clear s=0
for x=10 to 1000
if mod(x,7)=0 and mod(x,9)=0
s=x
&& s=x改为s=s+x
endif endfor ? x
&& x改为s set talk on return
&& 结果为:7560
7.求100以内最大的自然数n,使得从1开始的连续n个自然数的倒数之和小于3.5。
* * skgc7.prg set talk off clear s=0 for n=1 to 100 s=s+1/n
&& s=(s+1)/n 改为 s=s+1/n if s>=3.5 exit
&& loop 改为 exit endif endfor ? n-1 set talk on return
&& 结果为:18
9.求100以内最大的自然数n,使得从1开始的连续n个自然数的平方和小于5000。 set talk off clear s=0 for n=1 to 100 s=s+n*2
&& 改为s=s+n**2 if s>=5000 exit endif endfor ? n
&& 改为 ? n-1 set talk on return && 结果为:24
16.求出50以内最小的自然数n,使得从101开始的连续n个奇数之和大于3000。 set talk off clear s=0 for n=1 to 50
a=101+2*n
&& a=101+2*n 改为 s=s+99+2*n
s=s+a
&& 去掉 s=s+a
if s>3000
exit
endif endfor ? s
&& ? s 改为 ? n set talk on retur
&& 结果为:25
17.求出100以内使得算式1*2+2*3+„+n*(n+1)的值小于5000的最大的自然数n。 set talk off clear s=0 for n=1 to 100
a=n*(n+1)
s=s+a
if s
&& s=5000
exit
endif endfor ? n
&& ? n 改为 ? n-1 set talk on return && 结果为:23
20.求出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
&& t=1000
exit
endif endfor ? n
&& ? n 改为 ? n-1 set talk on return && 结果为:17
28.某国在2000年时人口总数为1亿,若以每年3%的速度递增,试求出至少要到哪一年该国人口总数才会翻一翻。 set talk off clear s=1 for n=2001 to 2100
s=s*1.03
if s=2
&& s=2 改为 s>2
loop
&& loop 改为 exit
endif endfor ? n set talk on return && 结果为:2024
30.设等比数列:1,2,4,8,„。求使得此数列的前n项之和大于100000的最小的自然数n。 set talk off clear a=1 s=1
&& s=1 改为 s=0 for n=1 to 100
s=s+a
&& 在 s=s+a 前加 a=2^(n-1)
if s>100000
exit
endif
a=2+a
&& 去掉 a=2+a 该句 endfor ? n set talk on return && 结果为:17
34.求出45678的所有非平凡因子(即除1和它本身以外的约数)中是奇数的因子个数。 set talk off clear a=45678 n=0 for b=3 to a step 2
if mod(b,a)=0
&& mod(b,a) 改为 mod(a,b)
n=n+1
endif endfor ? b
&& ? b 改为 ?n set talk on return && 结果为:7
35.求出203267的所有真因子(即小于它本身的约数)中最大的因子数。 set talk off clear a=203267 n=0 for b=1 to a
if mod(a,b)=0 && mod(b,a)=0 改为 mod(a,b)=0
&& 加 if b=a
&& 加 exit
&& 加 endif
max=a
&& max=a 改为 max=b
endif endfor ? a
&& ?a 改为 ? max set talk on return && 结果为:6557
37.求出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=d
&& max=b 改为 max=d
endif endfor ? max
&& ?d 改为 ? max set talk on return && 结果为:713
38.求559399的所有非平凡因子(即除1和它本身以外的约数)中最小的。 set talk off clear a=559399 for n=2 to a
if mod(a,n)=0
loop
&& loop 改为 exit
endif endfor return && 结果为:73
42.求9269和8671的最小公倍数。 set talk off clear a=9269 b=8671 for k=a to a*b step a
if mod(k,b)0
loop
endif
&& 加 exit endfor ? k set talk on return && 结果为:2668801
44.已知数列:1,2,4,7,11,16,„,其规律是相邻两项之差依次是1,2,3,4,5,„。试求出此数列中大于5000的最小的项。 set talk off clear a=1 for n=0 to 1000
a=a+n
if a>5000
loop
&& loop 改为 exit
endif endfor ? n
&& ?n 改为 ?a set talk on return && 结果为:5051
49.求出100以内最小的自然数n,使得从1开始的连续n个自然数的立方之和大于88888。 set talk off clear s=0 for n=1 to 100
a=n*3
&& a=n*3 改为 a=n^3
s=s+a
if s>88888
exit
endif endfor ? a
&& ?a 改为 ?n set talk on return && 结果为:24
54.设一数列{f(n)}:f(1)=1,当n>1时f(n)=1/(f(n-1)+1)。试求出此数列的前20项中大于0.618的项数。 set talk off clear f=1.00000000 n=0 for k=2 to 20
f=1/f+1
&& f=1/f+1 改为 f=1/(f+1)
if f>0.618
n=n+1
endif endfor ? N
&& ?n 改为 ? n+1 set talk on return
&& 答案:15
55.设有用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
&& 26 改为 25
lett=1/(lett+k)
if lett
n=n+1
endif endfor ? N set talk on return
&& 答案:16
57.设一个数列的前3项都是1,从第4项开始,每一项都是其前3项之和。试求出此数列的前25项中大于54321的项数。 set talk off clear store 1 to f1,f2,f3 n=0 for k=1 to 25
&& k=1 改为 k=4
f=f1+f2+f3
if f>54321
n=n+1
endif
f1=f2
f2=f3
f3=f1
&& f3=f1 改为 f3=f endfor ? n set talk on return
&& 答案:5
58.已知一个由分数组成的数列: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=f2 改为 f1=f1+f2
f2=f1
&& f2=f1 改为 f2=f1+f2 endfor ? n set talk on return
&& 答案:20
62.回文指的是正读和反读都一样的一串字符,如1
21、1221。试求出[1421,4112]内所有回文数的和。 set talk off clear s=0 for x=1421 to 4112
a=x/1000
&& 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-c*10
if a=d and b=c
s=s*x
&& s=s*x 改为 s=s+x
endif endfor ? s set talk on return
&& 答案:74250
77.若一个自然数恰好等于某个整数的平方,则称此数为完全平方数。如144是完全平方数,因为它等于12的平方。求[1000,3000]内所有完全平方数的和。 set talk off clear s=0 for x=1000 to 3000
y=sqrt(x)
&& y=sqrt(x) 改为 y=int(sqrt(x))
if x=y*y
s=s+x
endif endfor ? x
&& x 改为 s set talk on return
&& 答案:43539
二、编程题
78.若一个自然数恰好是它的平方的末后几位数,则称此数为自同构数。如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
m=len(ltrim(str(x)))
if mod(y,10*m)=x
s=s+x
endif endfor ? y set talk on return
&& 答案:101114
79.求满足条件A*B=54321且使A+B的值最小的自然数对A、B中较大的一个数。(提示:设A
&& 答案:953
82.设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 q=int(a)/b if q=1 n=n+1 endif a=mod(a,b) endfor ? n set talk on return
&& 答案:3
86.求出将十进制整数98765432等值转换为二进制形式表示后其中数字1的个数。(提示:模拟人工计算的“2除取余”法) set talk off clear a=98765432 p=2 do while a>0 r=mod(a,p) if r=1 n=1 endif a=int(a/p) enddo ? N set talk on return
&& 答案:13
88.求出将十进制整数99887766554等值转换为十六进制形式表示后其中字母C的个数。(提示:模拟人工计算的“16除取余”法) set talk off clear a=99887766554 p=16 n=0 do while a=0 r=mod(a,p) if r=11 n=n+r endif a=int(a/p) enddo ? n set talk on return
&& 答案:2
89.已知数列{f(n)}:f(1)=1,f(2)=1,当n>2时f(n)=f(n-2)+f(n-1)。试求此数列的第15项至第25项共11项之和。 set talk off clear dimension f(25) f(1)=1 f(2)=1 s=0 for n=3 to 25 f(n)=f(n-2)+f(n-1) if n
&& 答案:195431
91.求出将十进制小数0.987654321等值转换为二进制形式表示后前25位小数中数字0的个数。(提示:使用“2乘取整”法) set talk off clear x=0.987654321 n=0 for k=1 to 25 x=2**x z=int(x) x=x-z if z=1 n=n+z endif endfor ? n set talk on return
&& 答案: 8
93.对自然数A、B、C,若A
&& 答案: 5
95.求方程3x-7y=1在条件|x|
&& 答案: 26
300、已知24有8个正整数因子(即:1,2,3,4,6,8,12,24),而24正好被其因子个数8整除。求[300,1000]之间能被其因子数目整除的数的总和。 set talk off clea sm=0 for n=300 to 1000 s=0 for i=1 to n if mod(n,i)=0 s=s+1 endif endfor if mod(n,s)=0 sm=sm+n endif endfor ? sm set talk on return 答案:36550
29
6、找满足以下条件: X^2+Y^2+Z^2=41^2 且X+Y+Z之值最大的三个正整数X,Y,Z, 求X+Y+Z之值.set talk off clea max=0 for x=0 to 41 for y=0 to 41 for z=0 to 41 if x^2+y^2+z^2=41*41 if max
29
5、把一张一元钞票,换成一分、二分和五分硬币,每种至少1枚,问兑换后其中二分的硬币恰有20枚的方案共有多少种? set talk off clea n=0 for yi=1 to 60 for wu=1 to 20 er=20 if yi+er*2+wu*5=100 n=n+1 endif endfor endfor ? n set talk on return 答案:11
290、设某四位数的各位数字的平方和等于198,问满足这种条件的最大数和最小数之和是多少? set talk off clea min1=9999 max1=1000 for x=1000 to 9999 a=int(x/1000) b=int((x-a*1000)/100) c=int((x-b*100-a*1000)/10) d=mod(x,10) if a*a+b*b+c*c+d*d=198 if max1x min1=x endif endif endfor ? max1+min1 set talk on return 答案:12749
280、一个自然数是素数,且它的数字位置经过任意对换后仍为素数,则称为绝对素数。如13,试求两位数中最大的绝对素数与最小绝对素数之差。 set talk off clea min=100 max=0 for i=10 to 99 j=mod(i,10)*10+int(i/10) f1=1 for k=2 to i-1 if mod(i,k)=0 f1=0 endif endfor f2=1 for k=2 to j-1 if mod(j,k)=0 f2=0 endif endfor if f1=1 and f2=1 if min>i min=i endif max=i endif endfor ? max-min Return 答案:86
27
6、\"水仙花数\"是指这样的数,其各位数字的立方和等于该数本身,如:153=1^3+5^3+3^3。编写程序,计算从100年开始到3000年为止,最大的水仙花数年号为多少? set talk off clea s=100 for i=100 to 3000 a=int(i/1000) b=int((i-a*1000)/100) c=int(mod(i,100)/10) d=mod(i,10) if a**3+b**3+c**3+d**3=i if s
27
3、设有一个12*12方阵A(I,j),其每个元素的值为该元素下标的平方和, 求出该矩阵所有主对角线(i=j)上的元素的累加和.(注:I,j从1开始) set talk off dime a(12,12) s=0 for i=1 to 12 for j=1 to 12 a(i,j)=i*i+j*j if i=j s=s+a(i,j) endif endfor endfor ? s Return 答案:1300
26
9、若一个四位正整数是另一个正整数的平方,且各位数字的和是一个平方数,则称该四位正整数是\"四位双平方数\"。例如: 由于7396=86^2,且7+3+9+6=25=5^2,则称7396是\"四位双平方数\"。求所有\"四位双平方数\"且十位数字是3的数的之和\"。 set talk off clea n=0 for i=1000 to 9999 a=int(i/1000)
b=int((i-a*1000)/100)
c=int(mod(i,100)/10) d=mod(i,10) x=a+b+c+d if int(sqrt(i))^2=i and int(sqrt(x))^2=x and c=3 n=n+i endif endfor ? n set talk on return 答案:8836
26
4、编写程序,求所有符合算式ij*ji=1300的最大数ij(即i*10+j)。其中i、j是1~9之间的一位整数。 set talk off clea max=0 for i=1 to 9 for j=1 to 9 if (10*i+j)*(10*j+i)=1300 if max
26
1、勾股弦数是满足公式: A^2+B^2=C^2 (假定A
55、分子分母为正整数,分子小于分母且分子分母无公因数的分数称为最简真分数。对于分数的分母取值范围为 [50,90] 时的最简真分数共有多少个。 set talk off clea n=0 for a=2 to 90 && for b=50 to 90 && if a
2
31、求满足条件A*B=67532的所有自然数对A、B对应的A+B的最小值。(提示:设A
2
25、将大于1000且能被3和5中至少一个数整除的所有整数按从小到大顺序排列后,求前面20个数之和。 set talk off clear k=0 s=0 x=1000 do while k
2
24、求出[1234,2346]内恰好有两位数字是6所有整数的和(注意AT()函数和STR()函数的功能)。 set talk off clear s=0 for x=1234 to 2346 if at(\'6\',str(x),2)!=0 and at(\'6\',str(x),3)=0 s=s+x endif endfor ? s set talk on return 答案:47583
20
1、一球从100米高处落至平地,并且连续多次再反弹再落下,假设每次反弹的高度都是前一高度的3/4倍,试求出最小的自然数n,使得此球从开始下落至第n次着地时在垂直方向所经过的总路程超过589米。 set talk off clear h=100 s=h for n=2 to 100 h=h*3/4 s=s+2*h if s>589 exit endif endfor ?n set talk on return 答案:7