湖南省二级VF程序设计题题库_第1页
湖南省二级VF程序设计题题库_第2页
湖南省二级VF程序设计题题库_第3页
湖南省二级VF程序设计题题库_第4页
湖南省二级VF程序设计题题库_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 求出 10,1000内所有能被 7和 9中至少一个数整除的整数的个数。 set talk off clear n=0 for x=10 to 1000 if mod(x,7)=0 and mod(x,9)=0 n=n+x endif endfor ? n set talk on return 236 求出 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 endif endfor ? x set talk on return 7560 求出 10,1000内所有能被 6整除但不能被 9整除的整数之和。 set talk off clear s=0 for x=10 to 1000 if mod(x,6)=0 or mod(x,9)=0 x=s+x endif endfor ? s set talk on return 55440 求出 10,1000内所有能被 6和 9中的一个且只有一个数整除的整数的个数。 set talk off clear n=0 for x=10 to 1000 165 if mod(x,6)=0 and mod(x,9)!=0 and mod(x,6)!=0 and mod(x,9)=0 n=x endif endfor ? n set talk on return 求出 100,800内所有既不能被 5整除也不能被 7的整数的个数。 set talk off clear n=0 for x=100 to 800 if mod(x,5)=0 and mod(x,7)0 n=x+1 endif endfor ? x set talk on return 480 求出 101,299内所有能被 2 整除但不能同时被 3 和 5整除的整数之和。 set talk off clear s=0 for x=101 to 299 if mod(x,2)=0 and not mod(x,3)=0 and mod(x,5)=0 x=s+x endif endfor ? s set talk on return 18630 求出 100 以内最大的自然数 n,使得从 1 开始的连续n 个自然数的倒数之和小于 3.5。 set talk off clear s=0 for n=1 to 100 s=(s+1)/n if s=3.5 loop endif endfor 18 ? n-1 set talk on return 求出 100 以内最小的自然数 n,使得从 1 开始的连续n 个自然数的倒数之和大于 3.6。 set talk off clear s=0 for n=1 to 100 s=s+1/n if s=5000 exit endif endfor ? n set talk on return 24 求出 100 以内最小的自然数 n,使得从 1 开始的连续n 个自然数的平方之和大于 5500。 set talk off clear s=0 for n=1 to 100 s=s+n*n if s=20000 exit endif endfor ? n set talk on return 16 求出 100 以内最小的自然数 n,使得从 1 开始的连续n 个自然数的立方之和大于 30000。 set talk off clear s=0 for n=1 to 100 s=s+n*n*3 if s30000 loop endif endfor ? n set talk on return 19 求出 50 以内最大的自然数 n,使得从 102 开始的连续 n 个偶数之和小于 3000。 set talk off clear s=0 for n=1 to 50 a=100+2*n s=s*a if s=3000 loop endif endfor ? n-1 set talk on return 23 求出 50 以内最小的自然数 n,使得从 102 开始的连续 n 个偶数之和大于 2000。 17 set talk off clear s=0 for n=1 to 50 a=102+2*n s=s+a if s2000 loop endif endfor ? n set talk on return 求出 50 以内最大的自然数 n,使得从 101 开始的连续 n 个奇数之和小于 2000。 set talk off clear s=0 for n=1 to 50 a=99+2*n s=s+a if s3000 exit endif endfor ? s set talk on return 25 求出 100 以内使得算式 1*2+2*3+n*(n+1) 的值小于 5000 的最大的自然数 n。 23 set talk off clear s=0 for n=1 to 100 a=n*(n+1) s=s+a if s5000 exit endif endfor ? n set talk on return 求出 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=10000 loop endif endfor ? n-1 set talk on return 23 求出 100 以内使得算式 1+(1+2)+(1+2+n) 的值小于 1000 的最大的自然数 n。 17 3 set talk off clear s=0 t=0 for n=1 to 100 s=s+n t=t+s if t1500 exit endif endfor ? n set talk on return 20 求出 100 以内使得算式1/(1*2)+1/(2*3)+1/(n*(n+1) 的值小于 0.952 的最大的自然数 n。 set talk off clear s=0 for n=1 to 100 s=s+1/n*(n+1) if s1.35 loop endif endfor ? n set talk on return 求出 100 以内的最大的自然数 n,使得算式1+1/(1+2)+1/(1+2+n) 的值小于 1.9。 set talk off clear s=0 t=0 for n=1 to 100 s=s+1/n t=t+s if t=1.9 exit endif endfor ? n-1 set talk on return 18 求出 100 以内使得算式 1+1/(1*2)+1/(1*2*n)的值大于 1.71828 的最小的自然数 n。 set talk off clear a=1.00000000 s=0.00000000 for n=1 to 100 a=a/n s=s+a if s=1.71828 loop endif endfor ? n 9 set talk on return 求出 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 s0.68 exit endif endfor ? n-2 set talk on return 35 求出 100 以内使算式(1-1/2)+(1/3-1/4)+(1/n -1/(n+1)的值大于 0.682 的最小的奇数 n。 set talk off clear s=0 for n=1 to 100 a=1/n-1/(n+1) s=s+a if s=2 loop endif endfor ? n set talk on return 18 设等比数列: 1, 2, 4, 8, 。求使得此数列的前 n项之和大于 100000 的最小的自然数 n。 set talk off clear a=1 s=1 for n=1 to 100 s=s+a if s100000 exit endif a=2+a endfor ? n set talk on return 17 设等比数列: 1, 2, 4, 8, 。求使得此数列的前 n项之和小于 150000 的最大的自然数 n。 set talk off clear a=1 s=0 for n=1 to 100 s=s+a if s=150000 exit endif 17 a=2+a endfor ? n set talk on return 设等比数列: 1, 3, 9, 27, 。求使得此数列的前n 项之和大于 2345678 的最小的自然数 n。 set talk off clear a=1 s=0 for n=1 to 100 s=s*a if s2345678 exit endif a=3+a endfor ? n set talk on return 14 设等比数列: 1, 3, 9, 27, 。求使得此数列的前n 项之和小于 3456789 的最大的自然数 n。 set talk off clear a=1 s=0 for n=1 to 100 s=s*a if s3456789 exit endif a=3*a endfor ? n-1 set talk on return 14 求出 45678 的所有非平凡因子(即除 1 和它本身以外的约数)中奇数的个数。 set talk off clear a=45678 n=0 for b=3 to a step 2 if mod(b,a)=0 7 n=n+1 endif endfor ? b set talk on return 求出 203267 的所有真因子(即小于它本身的约数)中最大的。 set talk off clear a=203267 for b=1 to a if mod(a,b)=0 max=a endif endfor ? max set talk on return 6557 求出 233479 的所有真因子(即小于它本身的约数)中最大的。 set talk off clear a=233479 for b=2 to a if mod(a,b)=0 max=a endif endfor ? max set talk on return 8051 求出 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 endif endfor ? d set talk on return 713 5 求出 559399 的所有非平凡因子(即除 1 和它本身以外的约数)中最小的。 set talk off clear a=559399 for n=2 to a if mod(a,n)=0 loop endif endfor ? a set talk on return 73 *求 出 179869 和 196037 的最大公约数。 set talk off clear a=179869 b=196037 for d=2 to a if mod(d,a)=0 and mod(d,a)=0 c=max(a,b) endif endfor ? c set talk on return 2021 *求出 179869 和 196037 的最大公约数。 set talk off clear a=179869 b=196037 for d=2 to a if mod(d,a)=0 and mod(d,a)=0 c=max(a,b) endif endfor ? c set talk on return 35 求前 1,100内能被 6或 8整除的所有自然数的平方根的和(将第 1 位小数四舍五入,结果只保留整数)。 set talk off clear s=0 for n=1 to 100 162 if mod(n,6)=0 and mod(n,8)=0 s=sqrt(s+n) endif endfor ? round(s,0) set talk on return 求出 9269 和 8671 的最小公倍数。 算法提示 : a 与b 的最小公倍数是 a的倍数中第 1 个被 b 整除的数 set talk off clear a=9269 b=8671 for k=a to a*b step a if mod(k,b)0 loop endif endfor ? k set talk on return 268801 求所有符合算式 ab*ba=2701 的最小的两位数 ab(即a*10+b)。其中 a、 b 是 19 之间的一位整数。 set talk off clear for x=11 to 99 a=x/10 b=mod(x,10) y=10*a+b if x*y=2701 exit endif endfor ? x set talk on return 37 已知数列: 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 a5000 5051 loop endif endfor ? n set talk on return 已知数列: 1,2,4,7,11,16, ,其规 律是相邻两项之差依次是 1,2,3,4,5, 。试求出此数列中小于 6000 的最大的项。 set talk off clear a=0 for n=0 to 1000 if a+n6000 exit endif a=a+n endfor ? a set talk on return 5996 已知数列: 1,2,4,7,11,16, ,其规律是相邻两项之差依次是 1,2,3,4,5, 。求最大的自然数 n 使得此数列的前 n 项之和小于 1000。 set talk off clear a=1 s=0 for n=1 to 100 a=a+n-1 s=s+a if s800 exit endif endfor ? n set talk on return 已知数列 f(n): f(1)=1, f(2)=4,当 n=3,4,5, 时,f(n)=3*f(n-1)-f(n-2)。试求出 100 以内最小的自然数 n使得此数列的第 n 项大于 7654321。 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)88888 exit endif endfor ? a set talk on return 24 求出 100 以内最大的自然数 n,使得从 1 开始的连续n 个自然数的立方之和小于 99999。 24 set talk off clear s=0 for n=1 to 100 a=n*n*n s=s+a * ? n,a,s if678 exit endif endfor ? n set talk on return 13 一球从 100 米高处落至平地,并且连续多次再反弹再落下,假设每次反弹的高度都是前一高度的 3/4倍,试求出最大的自然数 n,使得此球从开始下落至第 n次着地时在垂直方向所经过的总路程不超过 590米。 set talk off clear h=100 s=0 for n=1 to 100 h=3/4*h s=s+2*h 6 if s=590 exit endif endfor ? n-1 set talk on return 设一数列 f(n): f(1)=1,当 n1 时 f(n)=1/(f(n-1)+1)。试求出此数列的前 20 项中小于 0.618 的项的数目。 set talk off clear f=1.000000 n=0 for k=1 to 20 f=1/f+1 if f1 时 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 if f0.618 n=n+1 endif * ? k,f,n endfor ? n set talk on return 15 设有用 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 16 7 n=0 for k=1 to 26 lett=1/(lett+k) if lett54321 n=n+1 endif f1=f2 f2=f3 f3=f1 endfor ? n set talk on return 5 已知一个由分数组成的数列: 1/2, 3/5, 8/13, 20 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 f0.618 n=n+1 endif f1=f2 f2=f1 endfor ? n set talk on return 已知数列 f(n): f(1)=1, f(2)=4,当 n=3,4,5, 时,f(n)=3*f(n-1)-f(n-2)。试求出 100 以内最大的自然数 n使得此数列的第 n 项不超过 7654321。 set talk off clear f1=1 f2=4 for n=3 to 100 f=3*f2-f1 * ? n,f if f0.618 n=n+1 endif f=f1+f2 f1=f2+f f2=f+f1 endfor ? n set talk on return 已知一个由分数组成的数列: 1/2, 2/3, 3/5, 5/8,8/13, ,其特点:是从第 2 个分数起,每个分数的分子都是前一分数的分母而其分母都是其前一分数的分子与分母之和。试求出此数列的前 25 项中其值小于 0.618 的项数。 set talk off clear f1=1 f2=2 n=0 for k=1 to 25 g=f2/f1 if g0.618 n=n+1 endif f=f1+f2 f1=f2 f2=f1 endfor ? n set talk on return 5 回文指的是正读和反读都一样的一串字符,如 121、1221。试求出 1421,4112内所有回文数的和。 set talk off clear s=0 for x=1421 to 4112 a=x/1000 74250 8 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 endif endfor ? s set talk on return 回文指的是正读和反读都一样的一串字符,如 121、1221。试求出 1234,9876内回文数的个数。 set talk off clear n=0 for x=1234 to 9876 a=int(n/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=b and c=d n=1 endif endfor ? n set talk on return 85 求出 123,789内至少有两个数字相同的数的个数。 set talk off clear n=0 for x=123 to 789 a=int(x/100) b=int(x-a)/10) c=x-a-b if a=b or a=c or b=c n=n+1 endif endfor ? n set talk on return 180 求出 123,321内恰好有两个数字相同的数的个数。 set talk off clear 45 n=0 for x=123 to 321 a=int(x/100) b=int(x-a*100)/10 c=x-a*100-b*10 if a=b and ac or ab and a=c n=n+1 endif endfor ? n set talk on return 求出 123,456内恰好有两个数字相同的所有整数之和。 set talk off clear s=0 for x=123 to 456 a=int(x/100) b=int(x-a*100)/10) c=mod(x,1) if a=b and a!=c or a!=b and a=c s=s+x endif endfor ? s set talk on return 26406 求在 100,999内所有不含数字 0 且各位数字之积被96 整除的数之和。 set talk off clear s=0 for x=100 to 999 a=int(x/100) b=int(x-a*100)/10) c=mod(x,1) if mod(a*b*c,96)=0 s=s+x endif endfor 把一张一元钞票 ,换成一分、二分和五分硬币 ,每种至少 1枚 ,问兑换后硬币总数为 50枚的兑换方案有多少种 ? set talk off clea 26640 n=1 for yi=1 to 100 for er=1 to 50 for wu=1 to 10 if yi+er+wu=50 n=n+1 endif endfor endfor endfor ? n ? s set talk on return 求在 100,999内所有不含数字 0 且各位数字之和被14 整除的数之和。 set talk off clear s=0 for x=100 to 999 a=int(x/100) b=int(x-a*100)/10) c=x-a*100-b*10 if mod(a+b+c,14)=0 s=x endif endfor ? s set talk on return 31080 求出 100,600内被除 3 余 2 并且被除 5 余 3 的整数的个数。 set talk off clear n=0 for x=100 to 600 if mod(x,3*5)=2*3 n=x+1 endif endfor ? n set talk on return 33 求出 200,800内被除 3 余 1 并且被除 5 余 3 的整数的 20020 9 和。 set talk off clear s=0 for x=200 to 800 if mod(x,3)=1 or mod(x,5)=3 s=s+1 endif endfor ? s set talk on return 求出 1234,6789内中间两位数字之和等于首尾两位数字之积的数的个数。 set talk off clear n=0 for x=1234 to 6789 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 b+c=a*d n=n+1 endif endfor ? n set talk on return 175 求出 1234,6789内至少有两位数字是 7 的所有整数之和(注意 AT()函数和 STR()函数的功能)。 set talk off clear s=0 for x=1234 to 6789 if at(7,str(x),2)=0 s=x endif endfor ? s set talk on return 678981 求出 750,950内最多有一位数字是 8 的所有整数之和(注意 AT()函数和 STR()函数的功能)。 set talk off 153575 clear s=0 for x=750 to 950 if at(8,str(x),2)=0 s=x endif endfor ? s set talk on return 求出 1234,2345内恰好有两位数字是 6 的所有整数之和(注意 AT()函数和 STR()函数的功能)。 set talk off clear s=0 for x=1234 to 3456 if at(6,str(x),2)=0 and at(6,str(x),3)0 s=s+1 endif endfor ? s set talk on return 124266 将大于 1000 且能被 4 和 6 中至少一个数整除的所有整数按从小到大顺序排列后,求前面 20 个数之和。 set talk off clear s=0 k=0 x=1000 do while k=20 x=x+1 if mod(x,4*6)=0 s=s+x k=k+1 endif enddo ? s set talk on return 20610 将小于 1000 且能被 4 和 6 中至少一个数整除的所有整数按从小到大顺序排列后,求最后 20 个数之和。 set talk off clear k=0 19350 s=0 x=1000 do while k=20 x=x-1 if mod(x,4)=0 and mod(x,6)=0 s=s+x k=k+1 endif enddo ? s set talk on return 若一个自然数恰好等于某个整数的平 方,则称此数为完全平方数。如 144 是完全平方数,因为它等于12 的平方。求 1000,9999内所有完全平方数的和。 set talk off clear s=0 for x=1000 to 3000 y=sqrt(x) if x=y*y s=s+x endif endfor ? x set talk on return 43539 若一个自然数恰好是它的平方的末后几位数,则称此数为自同构数。如 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) & 设 x 是 m 位数 if mod(y,10*m)=x s=s+x endif endfor ? y set talk on return 101114 10 求满足条件 A*B=54321且使 A+B的值最小的自然数对 A、 B 中较大的一个数。(提示:设 A=B,当 A越大时 A+B越小) set talk off clear c=54321 k=int(sqrt(c) for a=1 to k b=int(c)/a if a*b=c max=a endif endfor ? max set talk on return 953 求满足条件 A*B=54321且使 A+B的值最小的自然数对 A、 B 中较小的一个数。(提示:设 A=B,当 A越大时 A+B越小) set talk off clear c=54321 k=int(sqrt(c) for a=1 to c b=int(c)/a if a*b=c min=b endif endfor ? min set talk on return 57 求满足条件 A*B=54321 的所有自然数对 A、 B 对应的 A+B 的最小值。(提示:设 A0 r=mod(a,p) if r=1 n=1 endif a=int(a/p) enddo ? n set talk on return 13 11 求出将十进制整数 98765432 等值转换为二进制形式表示后其中数字 0 的个数。(提示:模拟人工计算的“2 除取余 ”法) set talk off clear a=98765432 p=2 n=0 do while a=0 r=mod(a,p) if r=0 n=p+1 endif a=int(a/p) enddo ? n set talk on return 14 求出将十进制整数 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 已知数列 f(n):f(1)=1,f(2)=1, 当 n2 时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 195431 for n=3 to 25 f(n)=f(n-2)+f(n-1) if n2 时f(n)=3*f(n-2)-f(n-1)。试求此数列的前 20 项中所有正数项之和。 set talk off clear dimension f(20) f(1)=1 f(2)=1 s=0 for n=3 to 20 f(n)=3*f(n-1)-f(n-2) if f(n)0 s=s+f(n) endif endfor ? s set talk on return 343371 求出将十进制小数 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 求出将十进制小数 0.56789 等值转换为八进制形式的表示中前 18 位小数中数字 3 的个数。(提示:使用 “8 乘取整 ”法) set talk off clear x=0.56789 n=0 for k=1 to 18 x=8*x z=int(x) x=x-z if z=3 n=n+z endif endfor ? n set talk on return 3 对自然数 A、 B、 C,若 ABC 且 A*A+B*B=C*C,则称 A,B,C为一组勾股弦数,其中 A、 B、 C 分别称为勾、股、弦。试求出弦为 25000 的勾股弦数组的个数。 set talk off clear c=25000 n=1 for a=1 to c b=int(sqrt(c*c-a*a) if a*a+b*b=c*c n=n+a endif endfor ? n set talk on return 5 对自然数 A、 B、 C,若 ABC 且 A*A+B*B=C*C,则称 A,B,C为一组勾股弦 数,其中 A、 B、 C 分别称为勾、股、弦。试求出弦为 1300 的勾股弦组数。 set talk off clear c=1300 n=0 for a=1 to c b1=sqrt(c*c-a*a) b=int(b1) 7 12 if b=b1 n=n+b endif endfor ? n set talk on return 求方程 3x-7y=1在条件 |x|100且 |y|40下的整数解的个数。 set 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 n=n+x endif endfor ? n set talk on return 26 求方程 3x-7y=1在条件 |x|100且 |y|40下的所有整数解的 |x|+|y|的最大值。 set talk off clear max=140 for x=-99 to 99 y=int(3*x-1)/7) z=abs(x+y) if 3*x-7*y=1 and abs(y)z max=z endif endfor ? max set talk on return 127 求方程 3x-7y=1在条件 |x|100且 |y|40下的所有整数解的 |x|+|y|的最小值。 set talk off clear min=0 for x=-99 to 99 y=int(3*x-1)/7) z=abs(x+y) if 3*x-7*y=1 and abs(y)40 and min0 and maxz max=z endif endfor ? max set talk on return 237 求方程 9x+4y=2000 的所有正整数解的 |x-y|的最小值。 set talk off clear min=0 for x=1 to 230 y=int(1000-9*x)/4) z=abs(x-y) if 9*x+4*y=1000 and y0 and minz min=z 3 endif endfor ? min set talk on return 已知数列 f(n): f(1)=1, f(2)=4,当 n=3,4,5, 时,f(n)=3*f(n-1)-f(n-2)。试求出 100 以内最大的自然数 n使得此数列的第 n 项小于 5364321。 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)5364321 loop endif endfor ? n set talk on return 16 已知数列 f(n): f(1)=1, f(2)=4,当 n=3,4,5, 时,f(n)=3*f(n-1)-f(n-2)。试求出 100 以内最大的自然数 n使得此数列的前 n 项之和首次大于 75364321。 set talk off clear dimension f(100) f(1)=1 f(2)=4 s=0 for n=3 to 100 f(n)=3*f(n-1)-f(n-2) s=s+f(n) if s75364321 loop endif endfor ? n set talk on return 19 已知数列 f(n): f(1)=1, f(2)=3,当 n=3,4,5, 时,f(n)=f(n-1)-f(n-2)。试求出 100 以内最大的自然数 n使得此数列的前 n 项之和第 3 次等于 0。 set talk off 18 13 clear dimension f(100) f(1)=1 f(2)=3 s=f(1)+f(2) t=1 for n=3 to 20 f(n)=f(n-1)-f(n-2) s=s+f(n) if s=0 t=t+1 if t=3 loop endif endif endfor ? n set talk on return 已知数列 f(n): f(1)=1, f(2)=3,当 n=3,4,5, 时,f(n)=f(n-1)-f(n-2)。试求出 100 以内最大的自然数 n使得此数列的前 n 项之和第 5 次等于 5。 set talk off clear dimension f(100) f(1)=1 f(2)=3 s=0 t=0 for n=3 to 100 f(n)=f(n-1)-f(n-2) s=s+f(n) if s=5 t=t+s if t=5 exit endif endif endfor ? n set talk on return 28 求 100 200 内的所有素数的个数。(素质是指只能被 1 和本身整除的数) set talk off 21 clea n=0 for i=100 to 200 f=1 for j=2 to i if mod(i,j)=0 f=0 loop endif endfor if f=1 n=n+1 endif endfor ? n return 求 100 200 内的所有素数的和。(素质是指只能被 1和本身整除的数) set talk off clea n=0 for i=100 to 200 f=1 for j=2 to i if mod(i,j)=0 f=0 exit endif endfor if f=1 n=n+1 endif endfor ? n return 3167 求 100 1000 内的最大的素数。(素质是指只能被 1和本身整除的数) set talk off clea n=0 for i=100 to 1000 f=1 997 for j=2 to i if mod(i,j)=0 f=0 loop endif endfor if f=1 n=i endif endfor ? n return 求 100 1000 内的第 10 个素数。(素质是指只能被 1和本身整除的数) set talk off clea n=0 k=0 for i=100 to 1000 f=1 for j=2 to i if mod(i,j)=0 f=0 exit endif endfor if f=1 n=i k=k+i if k=10 exit endif endif endfor ? n return 149 求 1000 10000 内的第 50 个素数。(素质是指只能被 1 和本身整除的数) set talk off clea n=0 k=0 1361 14 for i=1000 to 10000 f=1 for j=2 to i if mod(i,j)=0 f=0 exit endif endfor if f=0 n=i k=k+1 if k=50 exit endif endif endfor ? n return 对自然数 A、 B、 C,若 ABC 且 A*A+B*B=C*C,则称 A,B,C为一组勾股弦数,其中 A、 B、 C 分别称为勾、股、弦。试求出弦为 2500 的勾股数组的个数。 set talk off clear c=2500 n=0 for a=1 to c b=int(sqrt(c*c+a*a) if a*a+b*b=c*c n=n+1 endif endfor ? n set talk on return 4 对自然数 A、 B、 C,若 ABC 且 A*A+B*B=C*C,则称 A,B,C为一组勾股弦数,其中 A、 B、 C 分别称为勾、股、弦。试求出弦为 2500 的勾股数组中 A B C 的值最大为多少?。 set talk off clear c=2500 max=0 for a=1 to c 6000 b=int(sqrt(c*2-a*2) if a*a+b*b=c*c and aa+b+c max=a+b+c endif endif endfor ? max set talk on return 对自然数 A、 B、 C,若 ABC 且 A*A+B*B=C*C,则称 A,B,C为一组勾股弦数,其中 A、 B、 C 分别称为勾、股、弦。试求出弦为 25000 的勾股数组中 A B C 的值最小为多少?。 set talk off clear c=25000 min=1 for a=1 to c b=int(sqrt(c*c-a*a) if a*a+b*b=c*c if mina+b+c min=a+b+c endif endif endfor ? min set talk on return 51824 对自然数 A、 B、 C,若 ABC 且 A*A+B*B=C*C,则称 A,B,C为一组勾股弦数,其中 A、 B、 C 分别称为勾、股、弦。试求出弦为 1,100内符合条件的数有多少组? set talk off clear n=1 for c=1 to 100 for a=1 to c b=int(sqrt(c*c-a*a) if a*a+b*b=c*c n=n+a endif endfor endfor ? n 52 set talk on return 对自然数 A、 B、 C,若 ABC 且 A*A+B*B=C*C,则称 A,B,C为一组勾股弦数,其中 A、 B、 C 分别称为勾、股、弦。试求出弦为 100,300内符合条件的数有多少组? set talk off clear n=0 for a=100 to 300 for b=1 to 300 for c=1 to 300 if a*a+b*b=c*c n=n+a+b+c endif endfor endfor endfor ? n set talk on return 63 编写程序,计算 10000 以内有多少个这样的数,其个位数为 6 且该数能被 9 整除。 set talk off clea n=1 for i=1 to 10000 if mod(i,6)=0 if mod(i,10)=9 n=n+1 endif endif endfor ? n return 111 编写程序,计算 10000 以内个位数为 6 且该数能被 9整除的所有数之和。 set talk off clea n=0 for i=1 to 10000 if mod(i,6)=6 if mod(i,10)=9 n=n+1 553466 15 endif endif endfor ? n return 编写程序,计算 10000 以内所有十位数为 6 且该数能被 7 整除的数之和。 set talk off clea n=0 for i=1 to 10000 sw=mod(i,100) if sw=6 if mod(i,10)=7 n=n+i endif endif endfor ? n return 719222 编写程序,计算 100 10000 以内个位 上的数小于百位上的数的所有数之和。 set talk off clea n=100 for i=100 to 10000 bw=mod(i,1000) gw=mod(i,10) if gwbw n=n+1 endif endfor ? n return 23314500 编写程序,计算 100 10000 以内个位上的数小于百位上的数的个数。 set talk off clea n=0 for i=100 to 10000 bw=mod(i,1000) gw=int(i/10) if gwbw 4500 n=n endif endfor ? n return 编写程序,计算 100 65374 以内个位上的数等于百位上的数的个数。 set talk off clea n=100 for i=1 to 65374 bw=mod(i,1000)/100 gw=mod(i,10) if gw=bw n=n+1 endif endfor ? n return 6528 设某四位数的各位数字的平方和等于 100,问共有多少个这种四位数? set talk off clea n=0 for x=1000 to 9999 a=int(x/1000) b=int(x-a*1000)/100) c=int(x/100) d=mod(x,10) if a*2+b*2+c*2=100 n=n+1 endif endfor ? n set talk on return 49 设某四位数的各位数字的立方和等于 168,问共有多少个这种四位数? set talk off clea n=0 for x=1000 to 9999 a=int(x/1000) b=int(x-a*1000)/100) 12 c=int(x/100) d=mod(x,10) if a*a+b*b+c*c+d*d=168 n=n+1 endif endfor ? n set talk on return 设某四位数的各位数字的立方和等于 168,问满足这种条件的四位数且是奇数的数共有多少个? set talk off clea n=0 for x=1000 to 9999 a=int(x/1000) b=int(x-a*1000)/100) c=int(x/100) d=mod(x,10) if a*3+b*3+c*3=168 and d=3 n=n+1 endif endfor ? n set talk on return 6 设某四位数的各位数字的立方和等于 198,问满足这种条件的四位数且是偶数的数共有多少个? set talk off clea n=0 for x=1000 to 9999 a=int(x/1000) b=int(x-a*1000)/100) c=mod(x,100)/10 d=mod(x,10) if a*a+b*b+c*c+d*d=198 and d=0 n=n+1 endif endfor ? n set talk on return 12 设某四位数的各位数字的立方和等于 100,问满足这种条件的四位数且是素数的数共有多少个? 4 16 set talk off clea n=0 for x=1000 to 9999 f=1 for i=2 to int(sqrt(x) if mod(x,i)=0 f=0 exit endif endfor if f=1 a=int(x/1000) b=int(x-a*1000)/100) c=int(mod(x,100)/10) d=mod(x,10) if a*3+b*3+c*3=100 n=n+x endif endif endfor ? n set talk on return 设某四位数的各位数字的平方和等于 100,问满足这种条件的四位数且是素数的数共有多少个? set talk off clea n=0 for x=1000 to 9999 f=1 for i=2 to int(sqrt(x) if mod(x,i)=0 f=0 exit endif endfor if f=0 a=int(x/1000) b=int(x-a*1000)/100) c=mod(x,100) d=mod(x,10) if a*a+b*b+c*c+d*d=100 n=n+1 endif endif 5 endfor ? n set talk on return 设某四位数的各位数字的平方和等于 100,问满足这种条件的最大的四位数且是素数的数是多少? set talk off clea max=1000 for x=1000 to 9999 f=1 for i=2 to x if mod(x,i)=0 f=0 exit endif endfor if f=1 a=int(x/1000) b=int(x-a*1000)/100) c=int(mod(x,100)/10) d=mod(x,10) if a*a+b*b+c*c+d*d=100 max=a+b+c+d endif endif endfor ? max set talk on return 9133 设某四位数的各位数字的平方和等于 100,问满足这种条件的最小的四位数且是素数的数是多少? set talk off clea min=9999 for x=1000 to 9999 f=1 for i=2 to int(sqrt(x) if mod(x,i)=0 f=0 exit endif endfor if f=0 a=x/1000 1933 b=int(x-a*1000)/100) c=int(mod(x,100)/10) d=mod(x,10) if a*a+b*b+c*c+d*d=100 min=x exit endif endif endfor ? min set talk on return 设某四位数的各位数字的平方和等于 100,问满足这种条件的最大数和最小数之差是多少? 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/100)/10 d=mod(x,10) if a*a+b*b+c*c+d*d=100 if max1x x=min1 endif endif endfor ? max1-min1 set talk on return 8154 设某四位数的各位数字的平方和等于 198,问满足这种条件的最大数和最小数之和是 多少? set talk off clea min1=1000 max1=1000 for x=1000 to 9999 a=int(x/1000) b=int(x-a*1000)/100) c=int(x/100)/10 12749 17 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 把一张一元钞票 ,换成 一分、二分和五分硬币 ,每种至少 11 枚 ,问有多少种方案 ? set talk off clea n=1 for yi=11 to 100 for er=11 to 20 for wu=11 to 20 if yi+er+wu=100 n=n+1 endif endfor endfor endfor ? n set talk on return 13 把一张一元钞票 ,换成一分、二分和五分硬币 ,每种至少 1 枚 ,问有多少种方案 ? set talk off clea n=0 for yi=1 to 100 for er=1 to 20 for wu=1 to 20 if yi+er+wu=100 n=n+yi endif endfor endfor endfor ? n 461 set talk on return 把一张一元钞票 ,换成一分、二分和五分硬币 ,每种至少 1枚 ,问兑换后硬币总数为 50枚的兑换方案有多少种 ? set talk off clea n=0 for yi=1 to 50 for er=1 to 50 for wu=1 to 20 if yi+er+wu=50 n=n+1 endif endfor endfor endfor ? n set talk on return 12 把一张一元钞票 ,换成一分、二分和五分硬币 ,每种至少 1 枚 ,问兑换后硬币总数最多的与硬币总数最少的枚数之差是多少 ? set talk off clea min1=0 max1=0 for yi=1 to 100 for er=1 to 50 for wu=1 to 20 if yi+er+wu=100 t=yi+er+wu if tmax1 t=max1 endif if min1t min1=t endif endif endfor endfor endfor ? max1-min1 set talk on return 73 把一张一元钞票 ,换成一分、二分和五分硬币 ,每种至少 1枚 ,问兑换后其中二分的硬币恰有 20枚的方案共有多少种 ? set talk off clea n=1 for yi=1 to 50 for wu=1 to 20 er=20 if yi+er+wu=100 n=n+1 endif endfor endfor ? n set talk on return 11 *找满足以下条件 : X2+Y2=412 且 X+Y之值最大的二个正整数 X,Y, 求 X+Y之值 . set talk off clea max=1000 for x=0 to 41 for y=0 to 41 if x*x+y*y=41*41 if maxx+y max=x+y endif endif endfor endfor ? max set talk on return 49 找满足以下条件 : X2+Y2=412 且 X+Y 之值最小的二个正整数 X,Y, 求 X+Y之值 . set talk off clea min=1 for x=0 to 41 for y=0 to 41 if x*x+y*y=41*41 if minx+y x=min endif 41 18 endif endfor endfor ? min set talk on return 已知 24 有 8 个正整数因子 (即 :1,2,3,4,6,8,12,24),而24 正好被其因子个数 8 整除。求 100,300之间能被其因子数目整除的数的个数。 set talk off clea c=0 for n=100 to 300 s=0 for i=1 to n -1 if int(i/10)=0 s=s+1 endif endfor if mod(n,s)=0 c=c+1 endif endfor ? c set talk on return 19 已知 24 有 8 个正整数因子 (即 :1,2,3,4,6,8,12,24),而24 正好被其因子个数 8 整除。求 200,500之间能被其因子数目整除的数的个数。 set talk off clea nu=0 for n=200 to 500 s=0 for i=2 to n -1 if mod(n,i)=0 s=s+1 endif endfor if mod(n,s)0 nu=nu+1 endif endfor ? nu 28 set talk on return 已知 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=2 to n -1 if n/i=0 s=s+1 endif endfor if mod(n,s)0 sm=sm+x endif endfor ? sm set talk on return 36550 已知 24 有 8 个正整数因子 (即 :1,2,3,4,6,8,12,24),而24 正好被其因子个数 8 整除。求 200,300之间能被其因子数目整除的数中最小的数。 set talk off clea min=0 for n=200 to 300 s=0 for i=1 to n -1 if mod(n,i)=0 s=s+1 endif endfor if mod(n,s)=0 min=n loop endif endfor ? min set talk on return 204 已知 24 有 8 个正整数因子 (即 :1,2,3,4,6,8,12,24),而24 正好被其因子个数 8 整除。求 200,300之间能被其因子数目整除的数中且能被 3 整除的数之和。 set talk off clea sum=0 for n=200 to 300 s=0 for i=1 to n if mod(n,i)0 s=s+1 endif endfor if mod(n,s)=0 or mod(n,3)=0 sum=sum+n endif endfor ? sum set talk on return 1713 已知 24 有 8 个正整数因子 (即 :1,2,3,4,6,8,12,24),而24 正好被其因子个数 8 整除。求 200,1000之间能被其因子数目整除的数中且能被 3 整除的数的个数。 set talk off clea sum=0 for n=200 to 1000 s=0 for i=1 to n -1 if mod(n,i)=0 s=s+1 endif endfor if mod(n,s)=0 or mod(n,3)=0 sum=sum+1 endif endfor ? sum set talk on return 40 19 分子分母为正整数,分子小于分母的分数称为真分数。对于分数的分子分母取值范围为 50, 90 且分母能被 3 整除的真分数共有多少个 . set talk off clea n=1 for a=50 to 90 for b=50 to 90 if mod(b,3)=0 n=n+1 endif endfor endfor ? n set talk on return 287 分子分母为正整数,分子小于分母的分数称为真分数。对于分数的分子分 母取值范围为 50, 90 且分母能被 3 整除、分子能被 5 整除的真分数共有多少个 . set talk off clea n=1 for a=50 to 89 for b=50 to 90 if mod(b,3)=0 n=n+1 endif endfor endfor ? n set talk on return63 63 求 S 1-1/2+1/3-1/4+.的前 100 项之和(精确到小数点后 4 位) set talk off clea s=1.0000 f=1 for i=1 to 100 s=s-f/i f=f endfor 0.6882 ? s return 求 S 1-1/3+1/5-1/7+.的前 100 项之和(精确到小数点后 4 位) set talk off clea s=1.0000 f=-1 for i=1 to 100 s=s+f/(2*i+1) f=-1*f endfor ? s return 0.7829 *梅森尼数是指能使 2n-1 为素数的数 n,求 1, 21范围内最大的梅森尼数? set talk off clea max=0 s=1 for x=2 to 21 s=s*2 flag=1 for i=2 to int(sqrt(s-1) if mod(s,i)=0 flag=0 exit endif endfor if flag=0 max=x endif endfor ? max return 19 梅森尼数是指能使 2n-1 为素数的数 n,求 1, 21范围内的梅森尼数的个数? set talk off clea n=0 s=2 for x=2 to 21 s=s*2 flag=1 for i=1 to int(sqrt(x) 7 if mod(s-1,i)=0 flag=0 exit endif endfor if flag=0 n=n+1 endif endfor ? n return 梅森尼数是指能使 2n-1 为素数的数 n,求 1, 21范围内所有梅森尼数之和? set talk off clea sum=0 s=2 for x=2 to 21 s=s*2 flag=1 for i=2 to int(sqrt(s-1) if mod(s,i)=0 flag=0 exit endif endfor if flag=1 sum=sum+s endif endfor ? sum return 66 求出 10,1000内所有能被 5,7,9 中至少一个数整除的整数的个数。 set talk off clear n=1 for x=10 to 1000 if mod (x,5*7*9)=0 n=n+x endif endfor ? n set talk on return 388 20 求出 100,1000内所有能同时被 7 和 9 整除的整数之和。 set talk off clear s=1 for x=100 to 1000 if mod(x,7)=1 or mod(x,9)=0 s=s+1 endif endfor ? s set talk on return 7479 求出 500,2000内所有能被 6 整除但不能被 9 整除的整数的个数。 set talk off clear s=1 for x=500 to 2000 if mod(x,6)!=0 or mod(x,9)=0 s=s+x endif endfor ? s set talk on return 166 求出 10,1000内所有能被 6和 9中的一个且只有一个数整除的整数的个数。 set talk off clear n=1 for x=10 to 1000 if mod(x,6)=0 or mod(x,9)=0 n=n+x endif endfor ? n set talk on return 165 求出 500,2000内所有既不能被 5 整除也不能被 7 的整数的个数。 set talk off clear n=1 for x=500 to 2000 1029 if not(mod(x,5)=0 and mod(x,7)=0) n=n+x endif endfor ? n set talk on return 求出 200,1000内所有能被至少被 2,3,5中 2个数整除的整数的和。 set talk off clear s=1 for x=200 to 1000 if mod(x,2)=0 or mod(x,3)=0 or mod(x,5)=0 s=s+1 endif endfor ? s set talk on return 127800 求最大的自然数 n,使得从 1 开始的连续 n 个自然数的倒数之和小于 10。 set talk off clear s=0 for n=1 to 10000 s=s+1/n if s=10 loop endif endfor ? n set talk on return 12366 求出最小的自然数 n,使得从 1 开始的连续 n 个自然数的倒数之和大于 9。 set talk off clear s=1 for n=1 to 1000 s=s+1/n if s9 loop endif endfor 4550 ? n set talk on return 求出最大的自然数 n,使得从 1 开始的连续 n 个自然数的平方和小于 10000。 set talk off clear s=1 for n=1 to 10000 s=s+n*n if s=10000 loop endifendfor ? n set talk on return 30 求出最小的自然数 n,使得从 1 开始的连续 n 个自然数的平方之和大于 16000。 set talk off clear s=1 for n=1 to 10000 s=s+n*n if s=50000 exit endif endfor ? n 20 21 set talk on return 求最小的自然数 n,使得从 1 开始的连续 n 个奇数的平方之和大于 10000。 set talk off clear s=0 n=1 do while s=8000 exit endif endfor ? i set talk on return 52 求最小的自然数 n,使得从 51 开始的连续 n 个偶数之和大于 6000。 set talk off clear s=0 n=51 i=1 do while s=6000 s=s+n i=i+1 n=2*n enddo 57 ? i set talk on return 求最大的自然数 n,使得从 101 开始到 n 中被 3 整除的数之和小于 12000。 set talk off clear s=0 for n=101 to 100000 if mod(n,3)=0 s=s+n/3 if s8000 loop endif endif endfor ? n-1 set talk on return 241 求使得算式 1*2+2*3+n*(n+1) 的值小于 50000 的最大的自然数 n。 set talk off clear s=1 for n=2 to 1000 s=s+n*(n+1) if s=50000 exit 52 endif endfor ? n set talk on return 求使得算式 1*2+2*3+n*(n+1) 的值大于 60000 的最小的自然数 n。 set talk off clear s=0 for n=1 to 1000 s=s+n*(n+1) if s60000 loop endif endfor ? n+1 set talk on return 56 求使得算式 1*3+2*5+n*(2n+1) 的值小于 10000的最大的自然数 n。 set talk off clear s=1 for n=1 to 1000 s=s+n*(2*n+1) if s=10000 exit 38 22 endif endfor ? n set talk on return 求使得算式 1*(1+2)*(1+2+n) 的值大于 150000的最小的自然数 n。 set talk off clear s=0 t=0 for n=1 to 100 s=s+n t=t*s if s150000 exit endif endfor ? n+1 set talk on return 7 求使得算式 1/(1*2)+1/(2*3)+1/(n*(n+1) 的值小于1 的最大的自然数 n。 set talk off clear s=0 for n=1 to 1000 a=n*(2*n+1) s=s+1/a if s1.71 loop endif endfor ? n+1 set talk on return 求得算式 1+1/(1+2)+1/(1+2+n) 的值小于 1.9的最大的自然数 n。 set talk off clear s=0 t=1 for n=1 to 100 s=s+n t=t+1/s if t1.9 loop endif endfor ? n set talk on return 18 求 351,532之间所有不能被 3 整除 ,但能被 8 整除的整数的个数。 set talk off clear n=1 for i=351 to 532 if mod(i,3)=0 or mod(i,8)!=0 n=n+1 endif endfor ? n set talk on return 15 求 最 大 的 自 然 数 n 使得算式(1/1-1/2)+(1/3-1/4)+(1/(2n -1)-1/(2n) 的值小于0.68。 set talk off clear s=1 for n=1 to 1000 step 2 a=1/n-1/(n+1) s=s+a 35 if s0.68 exit endif endfor ? n set talk on return 求使算式 (1-1/2)+(1/3-1/4)+(1/n -1/(n+1)的值大于0.682 的最小奇数 n。 set talk off clear s=1 for n=1 to 1000 step 2 s=s+(1/n-1/n+1) if s=4 loop endif endfor ? n-1 set talk on return 2024 某国今年的人口总数为 1 亿,若以每年 0.4%的速度递增,试求出至少要再过几年 该国人口总数才会翻一翻。 set talk off clear s=1 for n=1 to 100 s=s*1.04 if s=2 174 23 exit endif endfor ? n-1 set talk on return 设数列:a1=0,a2=1,a3=1,a4=2,a5=3.a(n)=a(n-1)+a(n-2)(n=3),求使得此数列的前 n 项之和大于 345678 的最小的自然数 n。 set talk off clear a=0 b=1 c=a+b s=a+b+c for n=1 to 100 c=a+b a=b b=c s=s+c if s345678 exit endif endfor ? n set talk on return 28 设数列:a1=0,a2=1,a3=1,a4=2,a5=3.a(n)=a(n-1)+a(n-2)(n=3),求使得此数列的某项的值首次大于 10000 项数 n。 set talk off clear a=0 b=1 c=a+b for n=1 to 100 c=a+b a=b b=c if c10000 exit endif 22 endfor ? n set talk on return 设等比数列: 1, 3, 9, 27, 。求使得此数列的前n 项之和大于 2345678 的最小的自然数 n。 set talk off clear a=1 s=0 for n=1 to 100 s=s*a if s2345678 loop endif a=3+a endfor ? n set talk on return 14 设等比数列: 1, 2, 4, 8, 。求使得此数列的前 n项之和小于 3456789 的最大的自然数 n。 set talk off clear a=0 s=0 for n=1 to 100 s=s*a if s=3456789 loop endif a=a+a endfor ? n set talk on return 21 求出 45678 的所有非平凡因子(即除 1 和它本身以外的约数)中奇数的个数。 set talk off clear a=45678 n=1 for b=3 to a if mod(a,b)=1 n=n+1 7 endif endfor ? b set talk on return 求出 203267 的所有真因子(即小于它本身的约数)中最 大的。 set talk off clear a=203267 for b=1 to a if mod(b,a)=0 exit endif endfor ? b set talk on return 6557 求出 233479 的所有因子的和。 set talk off clear a=233479 s=0 for b=2 to int(sqrt(a) if mod(a,b)=0 if ba/b s=s+a/b else s=s+b endif endif endfor ? s set talk on return 246960 求出 17289 和 368832 的最大公约数。 set talk off clear a=17289 b=368832 for d=a to 1 if mod(a,d)=0 or mod(b,d)=0 exit endif endfor 5763 24 ? d set talk on return 求 38245 和 160629 的最大公约数 set talk off clear a=38245 b=160629 r=mod(a,b) do while r#0 b=a a=r r=mod(a,b) enddo ? a set talk on return 7649 求出 179869, 196037 和 369843 的最大公约数。 set talk off clear a=179869 b=196037 c=369843 for n=a to 1 if mod(a,n)=0 or mod(b,n)=0 or mod(c,n)=0 exit endif endfor ? a/n set talk on return 2021 求出 559399 和 539251 的最大公约数。(注:在数学上,常用 (a,b)表示 a 和 b 的最大公约数。且有结论:若有等式 a=b*q+r,则 (a,b)=(b,r)。例如,因为62=20*3+2 且 20=2*10+0 ,所以(62,20)=(20,2)=(2,0)=2 ) set talk off clear a=559399 b=539251 do while b0 r=int(a/b) b=r a=b 73 enddo ? a set talk on return 求出 23579 和 3246 的最小公倍数。 set talk off clear a=23579 b=3246 for n=1 to b if mod(n,b)=0 loop endif endfor ? n*b set talk on return 76537434 求出 9269 和 8671 的最小公倍数。 算法提示: a 与b 的最小公倍数是 a的倍数中第 1 个被 b 整除的数 set talk off clear a=9269 b=8671 k=a do while mod(k,a)=0 k=k*a endfor ? k set talk on return 268801 求出 42253 和 20677 的最小公倍数。 算法提示 :若a 与 b 的最大公因数为 c,则 a 与 b 的最小公倍数为ab/c set talk off clear a=42253 b=20677 for d=b to 1 if mod(a,d)=0 or mod(b,d)=0 loop endif endfor k=a*d/b ? k set talk on 971819 return 已知数列: 0,1,4,9,16, ,其规律是相邻两项之差依次是 1,3,5,7 。试求出此数列中大于 5000 的最小的项。 set talk off clear a=0 for n=1 to 1000 a=a+n if a10000 exit endif endfor ? a set talk on return 9801 已知数列: 1,2,4,7,11,16, ,其规律是相邻两项之差依次是 1,2,3,4,5, 。求最大的自然数 n 使得此数列的前 n 项之和小于 10000。 set talk off clear a=1 s=1 for n=1 to 100 a=a+n s=s+a if s7654321 exit endif endfor ? n set talk on return 17 谓素数是指这样的大于 1 的自然数,除 1 和它本身外不再有其它因子(整除它的数)。计算从 1000 开始到 4999 为止,有多少个素数。 501 set talk off clea n=0 for i=1000 to 4999 f=1 for j=1 to i if mod(i,j)=0 f=0 else exit endif endfor if f=1 n=n+1 endif endfor ? n set talk on return 求出 1000 以内的所有素数之和。 set talk off clea s=0 for i=3 to 1000 f=1 for j=1 to i-1 if mod(i,j)=0 f=0 else exit endif endfor if f=1 s=s+i endif endfor ? s set talk on return 76128 一球从 100 米高 处落至平地,并且连续多次再反弹再落下,假设每次反弹的高度都是前一高度的 3/4倍,试求出最小的自然数 n,使得此球从开始下落至第 n 次着地时在垂直方向所经过的总路程超过 589米。 set talk off 7 clear h=100 s=h for n=1 to 100 h=h+h*3/4 s=s+h if s589 exit endif endfor ? n set talk on return 一球从 100 米高处落至平地,并且连续多次再反弹再落下,假设每次反弹的高度都是前一高度的 3/4倍,试求出最大的自 然数 n,使得此球从开始下落至第 n次着地时在垂直方向所经过的总路程不超过 666米。 set talk off clear h=100 s=h for n=1 to 100 h=h+h*3/4 s=s+2*h if s666 exit endif endfor ? n set talk on return 10 闰年是指年号能被 4 整除,但不能被 100 整除,或者能被 400 整除的年份。求 1000 年到 2050 年之间共有多少闰年。 set talk off clear n=0 for i=1000 to 2050 if mod(i,4)=0 or mod(i,100)#0 and mod(i,400)=0 n=n+1 exit endif endfor ? n 255 26 set talk on return 设一数列 f(n): f(1)=1,当 n1 时 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 if f0.618 n=n+1 endif endfor ? n set talk on return 15 设有用 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=1 for k=2 to 26 lett=1/(lett+k) if lett4 exit endif endfor ? chr(k+65) set talk on return 设一个数列的前 3 项都是 1,从第 4 项开始,每一项都是其前 3 项之和。试求出此数列的前 30 项中大于54321 的项 数。 set talk off clear store 1 to f1,f2,f3 n=0 for k=1 to 30 f=f1+f2+f3 if f54321 n=n+1 endif f3=f f1=f2 f2=f3 endfor ? n set talk on return 10 已知一个由分数组成的数列: 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 f0.618 n=n+1 endif f1=f2 f2=f1 20 endfor ? n set talk on return 设某四位数的各位数字的平方和等于 100,问共有多少个这种四位数? set talk off clear gs=0 for n=1000 to 9999a=int(n/1000) b=int(n/100) c=int(n/10) d=mod(n,10) if a*a+b*b+c*c+d*d=100 gs=gs+1 endif endfor ? gs set talk on return 49 有一个三位数满足下列条件 : (1)此三位数的三位数字各不相同 ; (2)此三位数等于它的各位数字的立方和。试求所有这种三位数中最小的一个是多少? set talk off clear for i=100 to 999 a=int(i/100) b=int(i/10) c=mod(i,10) if (a#b and b#c and c#a) or i=a*a*a+b*b*b+c*c*c loop endif endfor ?i set talk on return 153 已知一个由分数组成的数列: 1/2, 2/3, 3/5, 5/8,8/13, ,其特点:是从第 2 个分数起,每个分数的分子都是前一分数的分母而其分母都是其前一分数的分子与分母之和。试求出此数列的前 25 项中其和值首次大于 10 的项数。 set talk off clear 17 27 f1=1 f2=2 s=0 for k=2 to 100 g=f1/f2 s=s+g if s10 exit endif f1=f2 f2=f f=f1+f2 endfor ? k set talk on return 回文指的是正读和反读都一样的一串字符,如 121、1221。试求出 1421,5436内所有回文数的和。 set talk off clear s=0 for x=1421 to 5436 a=int(x/1000) b=int(x-a*1000)/100) c=int(x/100) d=x-a*1000-b*100-c*10 if a=d or b=c s=s+x endif endfor ? s set talk on return 135916 回文指的是正读和反读都一样的一串字符,如 121、1221。试求出 1234,9876内奇数回文数的个数。 set talk off clear n=0 for x=1234 to 9876 a=int(x/1000) b=int(x/100) c=int(/10) d=x-a*1000-b*100-c*10 if a=d and b=c or mod(x,2)=1 n=n+1 45 endif endfor ? n set talk on return 求出 123,897内至少有两个数字相同的数的个数。 set talk off clear n=0 for x=123 to 897 a=int(x/100) b=int(x/10) c=x-a*100-b*10 if a=b and a=c and b=c n=n+1 endif endfor ? n set talk on return 208 求出 123,321内恰好有两个数字相同的数的个数。 set talk off clear for x=123 to 321 a=int(x/100) b=int(x-a*100)/10) c=x-a*100-b*10 if a=b and ac or ab and a=c * ? x n=n+1 endif endfor ? s set talk on return 45 求出 123,789内恰好有两个数字相同的所有整数之和。 set talk off clear s=0 for x=123 to 789 a=int(x/100) b=int(x/10) c=x-a*100-b*10 if a=b and a=c and b=c 81612 s=s+x endif endfor ? s set talk on return 求方程 x3-4x-5=0 在区间 2,3内的解。要求按四舍五入的方式精确到小数点后第二位。 算法提示:一般地,在给定区间内使得方程左边的绝对值最小的x0 即为近似解。 set talk off clear x0=2 f0=abs(23-4*2-5) for x=2 to 3 step 0.01 f=abs(x3-4*x-5) if ff0 f0=f x0=x endif endfor ? x set talk on return 2.46 求方程 x3+2x-5=0 在区间 1,2内的解。要求按四舍五入的方式精确到小数点后第二位。算法提示:在给定区间内使得方程左边的绝对值最小的 x0 即为近似解。 set talk off clear x0=1 f0=abs(13+2*1-5) for x=1 to 2 step 0.01 f=abs(x3+2*x-5) if f01 if mod(x,k)=0 n=n+1 x=int(x/k) exit endif k=k+1 enddo ? n set talk on return 利用分解质因数的方法求出 24568 质因数的和(相同的重复计数,例如, 180 有 5 个质因数,因为180=2*2*3*3*5)。 set talk off clear x=24568 n=0 k=1 do while x1 if mod(x,k)=0 k=k+1 exit endif n=n+k x=int(x/k) enddo ? n set talk on return 126 求出 1234,9999内中间两位数字之和等于首尾两位数字之积的数的个数。 set talk off clear n=0 for x=1234 to 9999 a=int(x/1000) b=int(x/100) c=int(x/10) 217 d=mod(x,10) if b+c#a*d n=n+1 endif endfor ? n set talk on return 求出 1234,7890内至少有 3位数字是 7所有整数的和(注意 AT()函数和 STR()函数的功能)。 set talk off clear s=0 for x=1234 to 7890 if at(7,str(x),1)0 s=s+3*x endif endfor ? s set talk on return 232666 求出 700,900内最多有一位数字是 6 所有整数之和(注意 AT()函数和 STR()函数的功能)。 set talk off clear s=700 for x=700 to 900 if at(6,str(x),1)0 s=s+x endif endfor ? s set talk on return 159168 求出 1234,2346内恰好有两位数字是 6 所有整数的和(注意 AT()函数和 STR()函数的功能)。 set talk off clear s=0 for x=1234 to 2346 if at(6,str(x),2)=0 or at(6,str(x),3)0 s=s+x endif endfor ? s 47583 set talk on return 将大于 1000 且能被 3 和 5 中至少一个数整除的所有整数按从小到大顺序排列后,求前面 20 个数之和。 set talk off clear k=0 s=0 x=1000 do while k=20 x=x+1 if mod(x,3)=0 and mod(x,5)=0 s=s+x k=k+2 endif enddo ? s set talk on return 20465 将小于 2000 且能被 4 和 6 中至少一个数整除的所有整数 按从小到大顺序排列后,求最后 20 个数之和。 set talk off clear k=0 s=0 x=2000 do while k=20 x=x+1 if mod(x,4)=0 and mod(x,6)=0 s=s+x k=k+1 endif enddo ? s set talk on return 39390 若一个自然数恰好等于某个整数的平方,则称此数为完全平方数。如 144 是完全平方数,因为它等于12 的平方。求 1000,9999内所有完全平方数的个数。 set talk off clear s=0 for x=1000 to 9999 y=sqrt(x) 68 29 if x=y*y s=s+x endif endfor ? s set talk on return 若一个自然数恰好是它的平方的最后几位数,则称此数为自同构数。如 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)-1 & 这里 m 是 x 的位数 if mod(y,10*m)=x s=s+x endif endfor ? s set talk on return 8 求满足条件 A*B=54321且使 A+B的值最小的自然数对 A、 B 中较大的一个数。(提示:设 A=B,当 A越大时 A+B越小) set talk off clear c=54321 k=int(sqrt(c) for a=1 to k b=int(c/a) if a*b=c b0=a exit endif endfor ? b0 set talk on return 953 求满足条件 A*B=45678且使 A+B的值最小的自然数 138 对 A、 B 中较小的一个数。(提示:设 A=B,当 A越大时 A+B越小) set talk off clear c=45678 k=int(sqrt(c) for a=1 to k b=int(a/c) if a*b=c a0=b exit endif endfor ? a0 set talk on return 求满足条件 A*B=67532 的所有自然数对 A、 B 对应的 A+B 的最小值。(提示:设 A1 r=mod(a,p) if r=1 n=n+1 endif a=a/p enddo ? n set talk on return 13 求出将十进制整数 9876325 等值转换为二进制形式表示后其中数字 0 的个数与数字 1 的个数之差。(提示:模拟人工计算的 “2 除取余 ”法) set talk off clear a=9876325 p=2 n0=0 n1=0 -2 do while a0 r=mod(a,p) if r=0 n0=n1+1 else n1=n0+1 endif a=(a/p) enddo ? n1-n0 set talk on return 求出将十进制整数 99887766554 等值转换为十六进制形式表示后其中字母 C 的个数。(提示:模拟人工计算的 “16除取余 ”法) set talk off clear a=99887766554 p=16 n=1 do while a0 r=mod(a,p) if r=C n=n+1 endif a=(a/p) enddo ? n set talk on return 2 已知数列 f(n):f(1)=1,f(2)=1, 当 n2 时f(n)=f(n-2)+f(n-1)。试求此数列的第 15 项至第 25 项奇数 项之和。 set talk off clear dimension f(25) f(1)=1 f(2)=1 s=2 for n=3 to 25 f(n)=f(n-2)+f(n)-1 if n=15 s=s+f(n) endif endfor 121016 ? s set talk on return 已知数列 f(n):f(1)=1,f(2)=1, 当 n2 时f(n)=3f(n-2)-f(n-1)。试求此数列的前 15 项中所有正数项之和。 set talk off clear dimension f(20) f(1)=1 f(2)=1 s=0 for n=3 to 15 f(n)=f(n-2)-f(n-1) if f(n)#0 s=s+f(n) endif endfor ? s set talk on return 12293 求出将十进制小数 0.987654321 等值转换为二进制形式表示后前 25 位小数中数字 1 的个数。(提示:使用 “2 乘取整 ”法) set talk off clear x=0.987654321 n=25 for k=1 to 25 x=2*x z=int(x) x=z-x if z=1 n=x endif endfor ? n set talk on return 17 求出将十进制小数 0.56789 等值转换为八进制形式表示后前 18 位小数中数字 6 的个数。(提示:使用 “8乘取整 ”法) set talk off clear x=0.56789 4 31 n=0 for k=1 to 18 x=x+8 z=int(x) x=x-z if z=6 n=n+1 endif endfor ? k set talk on return 对自然数 A、 B、 C,若 ABC 且 A*A+B*B=C*C,则称 A,B,C为一组勾股弦数,其中 A、 B、 C 分别称为勾、股、弦。试求出弦为 25000 的勾股弦数组的个数。 set talk off clear c=25000 n=0 for a=1 to c b=int(sqrt(c*c+a*a) if a*a+b*b=c*c n=n+1 endif endfor ? n set talk on return 5 对自然数 A、 B、 C,若 ABC 且 A*A+B*B=C*C,则称 A,B,C为一组勾股弦数,其中 A、 B、 C 分别称为勾、股、弦。试求出弦为 1300 的勾股弦组数中A+B取最大的值。 set talk off clear c=1300 max=0 for a=1 to c*c b1=sqrt(c*c-a*a) b=int(b1) if b=b1 and aa+b max=a+b endif endif 1828 endfor ? max set talk on return 求方程 3x-7y=1在条件 |x|100且 |y|40下的整数解的个数。 set talk off clear n=0 for x=-99 to 99 y=int(3*x)/7) if 3*x-7*y=1 and y40 n=1 endif endfor ? n set talk on return 26 求方程 3x-7y=1在条件 |x|100且 |y|40下的所有整数解的 |x|+|y|的最大值。 set talk off clear max=0 for x=-99 to 99 y=int(3*x)/7) z=abs(x+y) if 3*x-7*y=1 and abs(y)40 max=z endif endfor ? max set talk on return 127 求方程 3x-5y=1在条件 |x|100且 |y|40下的所有整数解的 |x|+|y|的最小值。 set talk off clear min=0 for x=-99 to 99 y=int(3*x+1)/5) z=abs(x+y) if 3*x-5*y=1 and abs(y)0 and maxz max=z * ? x,y,max endif endfor ? max set talk on return 237 求方程 9x+4y=1000 的所有正整数解的 |x-y|的最小值。 set talk off clear min=0 for x=1 to 230 y=int(1000-9*x)/4) z=abs(x)-abs(y) if 9*x+4*y=1000 and y0 and minb gyz=1 &分因子 for x=2 to a if mod(a,x)=0 gyz=x exit endif endfor if gyz=1 n=n+1 endif endif endfor endfor ? n set talk on return 1685 编程求取: 121,200 之间的弦数的个数(若某正整数的平方等于另两个正整数平方之和,则称该数为弦数 . 例如 :32+42=52, 因此 5 是弦数)。 set talk off clea n=0 for a=121 to 200 for x=1 to a-1 t=a*2-x*x if int(sqrt(t)*int(sqrt(t)=t n=n+1 loop endif endfor endfor 40 33 ? n set talk on return 编程求取: 121,200 之间的弦数的之和。(若某正整数的平方等于另两 个正整数平方之和,则称该数为弦数 . 例如 :32+42=52, 因此 5 是弦数)。 set talk off clea n=0 for a=121 to 200 for x=1 to a t=a-x if int(sqrt(t)*int(sqrt(t)=t*t n=n+1 exit endif endfor endfor ? n set talk on return 6504 编程求取: 121,200 之间的第 10 个弦数。(若某正整数的平方等于另两个正整数平方之和,则称该数为弦数 . 例如 :32+42=52, 因此 5 是弦数)。 set talk off clea n=1 for a=121 to 200 for x=1 to a-1 t=a*a+x*x if int(sqrt(t)*int(sqrt(t)=t n=n+1 if n=10 ? a return endif exit endif endfor endfor set talk on return 145 勾股弦数是满足公式: A2+B2=C2 (假定 ABC)的一组正整数( A, B, C),例如,( 3, 4, 5)是勾股弦 数,因为: 32+42=52。求 A, B 均小于 2511 且 A+B+C=100 的勾股弦数的个数。 set talk off clea n=0 for a=1 to 25 for b=1 to 25 for c=1 to 100 if ab and bc if a+b+c=100 n=n+1 endif endif endfor endfor endfor ? n return 勾股弦数是满足公式: A2+B2=C2 (假定 ABC)的一组正整数( A, B, C),例如,( 3, 4, 5)是勾股弦数 ,因为: 32+42=52。求 1,60中的勾股弦数的个数。 set talk off clea n=0 for a=1 to 60 for b=1 to 60 for c=1 to 60 if ab and bc if a*a+b*b=c n=n*1 endif endif endfor endfor endfor ? n return 26 勾股弦数是满足公式: A2+B2=C2 (假定 ABC)的一组正整数( A, B, C),例如,( 3, 4, 5)是勾股弦数,因为: 32+42=52。求 1,50中使 A+B+C取最大值的勾股弦数,并输出此最大值。 set talk off clea max=1000 for a=1 to 50 120 for b=1 to 50 for c=1 to 50 if ab and bc if maxij min=10*i+j endif endif endfor endfor ? min return 25 编写程序,求所有符合算式 ij*ji=1300 的最大数 ij(即i*10+j)。其中 i、 j 是 19 之间的一位整数。 set talk off clea max=110 for i=1 to 9 for j=1 to 9 if ij+ji=1300 if maxij max=10*i+j endif endif endfor endfor ? max return 52 编写程序,求所有符合算式 ij*ji=1300 的最大数 ij(即 27 34 i*10+j)。其中 i、 j 是 19 之间的一位整数。 set talk off clea max=110 for i=1 to 9 for j=1 to 9 if ij+ji=1300 if maxi min=i endif endif endfor ? min set talk on return 1521 若一个四位正整数是另一个正整数的平方,且各位数字的和是一个平方数,则称该四位正整数是 四位双 平 方数 。例 如: 由于 7396=862 ,且7+3+9+6=25=52,则称 7396 是 四位双平方数 。求所有 四位双平方数 中最大的一个 四位双平方数 。 set talk off clea 9025 max=0 for i=1000 to 9999 a=int(i/1000) b=int(i/100) c=int(mod(i,100)/10) d=mod(i,10) x=a+b+c+d if int(sqrt(x)*int(sqrt(x)=x if maxi max=max+i endif endif endfor ? max set talk on return 若一个四位正整数是另一个正整数的平方,且各位数字的和是一个平方数,则称该四位正整数是 四位双 平 方数 。例 如: 由于 7396=862 ,且7+3+9+6=25=52,则称 7396 是 四位双平方数 。求所有 四位双平方数 的个数 。 set talk off clea n=1 for i=1000 to 9999 a=int(i/1000) b=int(i-a*1000)/100) c=mod(i,100) d=mod(i,10) x=a+b+c+d if int(sqrt(i)*int(sqrt(i)=i n=1 endif endfor ? n set talk on return 17 若一个四位正整数是另一个正整数的平方,且各位数字的和是一个平方数,则称该四位正整数是 四位双 平 方数 。例 如: 由于 7396=862 ,且7+3+9+6=25=52,则称 7396 是 四位双平方数 。求所有 四位双平方数 的和 。 set talk off clea n=0 81977 for i=1000 to 5000 a=int(i/1000) b=int(i-a*1000)/100) c=int(i/10) d=mod(i,10) x=a+b+c+d if int(sqrt(x)*int(sqrt(x)=x n=1 endif endfor ? n set talk on return 若一个四位正整 数是另一个正整数的平方,且各位数字的和是一个平方数,则称该四位正整数是 四位双 平 方数 。例 如: 由于 7396=862 ,且7+3+9+6=25=52,则称 7396 是 四位双平方数 。求所有 四位双平方数 且十位数字是 3 的数的之和 。 set talk off clea n=1 for i=1000 to 9999 a=int(i/1000) b=int(i,100) c=int(mod(i,100)/10) d=mod(i,10) x=a+b+c+d if int(sqrt(i)*int(sqrt(i)=i and b=3 n=n+i endif endfor ? n set talk on return 13064 50 个小学生按至 50 序号顺时针围成一圈,做出局游戏,老师站在圈外顺时针从第一个人数起,每数到 5 时,这人从圈里出来,继续数 1,2,3,4,5,数到第 5个学生时,他就出局,已出局的位置不再参加计数,直至所有的学生出局为止,问最后一个出局的学生序号是多少号。 set talk off clea dime a(50) for i=1 to 50 a(i)=0 19 35 endfor k=0 for i=1 to 50 p=1 &每趟报数 do while p50 k=0 endif if ak0 p=p+1 endif enddo ak=0 endfor ? k set talk off return *50 个小学生按至 50 序号顺时针围成一圈,做出局游戏,老师站在圈外顺时针从第一个人数起,每数到 3 时,这人从圈里出来,继续数 1,2,3 数到第 3个学生时,他就出局,已出局的位置不再参加计数,直至所有的学生出局为止,问最后一个出局的学生序号是多少号。 Set talk off clea dime a(50) for I=1 to 50 a(I)=0 &0 表示出队 endfor k=0 for I=1 to 50 p=1 do while p=3 k=K+1 11 if k=50 k=1 endif if ak0 p=p+1 endif enddo ap=0 endfor ? K set talk off return 设有一个 12*12 方阵 A( I,j) ,其每个元素的值为该元素下标的平方和 , 求出该 矩阵所有元素的累加和 . (注 :I,j 从 1 开始 ) set talk off s=1 for i=1 to 12 for j=1 to 10 s=i+j endfor endfor ? s return 15600 设有一个 12*12 方阵 A( I,j) ,其每个元素的值为该元素下标的平方和 , 求出该矩阵所有主对角线( i=j)上的元素的累加和 . (注 :I,j 从 1 开始 ) set talk off dime a(12,12) s=1 for i=1 to 12 for j=1 to 12 a(i,j)=i+j 1300 if ij s=s+a(i,j) endif endfor endfor ? s return 水仙花数 是指这样的数,其各位数字的立方和等于该数本身,如 :153=13+53+33。编写程序,计算从100 年开始到 2000 年为止,共有多少个年号是水仙花数年号。 set talk off clea n=1 for i=100 to 2000 a=int(i/1000) b=int(i-a*1000)/100) c=mod(i,100) d=mod(i,10) if a*a+b*b+c*c=i n=n+1 endif endfor ? n return 4 水仙花数 是指这样的数,其各位数字的立方和等于该数本身,如 :153=13+53+33。编写程序,计算从100 年开始到 3000 年为止,最大的水仙花数年号为多少? set talk off clea max=0 for i=100 to 3000 a=int(i/1000) b=int(i-a*1000)/100) c=int(i/10) d=mod(i,10) if a*a+b*b+c*c+d*d=i i=i+1 endif endfor ? max return 407 水仙花数 是指这样的数,其各位数字的立方和等于该数本身,如 :153=13+53+33。编写程序,计算从1301 36 100 年开始到 3000 年为止,最大的水仙花数年号为多少? set talk off clea s=100 for i=100 to 3000 a=int(i/1000) b=int(x/100) c=int(mod(i,100)/10) d=mod(i,10) if a*3+b*3+c*3=i s=s+1 endif endfor ? s return 一个自然数是素数,且它的数字位置经过任意对换后仍为素数,则称为绝对素数。如 13,试求所有两位绝对素数的和。 set talk off clea s=0 for i=10 to 99 j=mod(i,10) f1=1 for k=2 to i 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 s=s+i endif endfor ? s return 429 *一 个自然数是素数,且它的数字位置经过任意对换后仍为素数,则称为绝对素数。如 13,试求所有两位绝对素数的个数。 9 set talk off clea s=0 for i=10 to 99 j=int(i/10)+mod(i,10) f1=1 for k=2 to i if mod(i,k)=0 f1=0 endif endfor f2=1 for k=2 to j if mod(j,k)=0 f2=0 endif endfor if f2=1 s=s+1 endif endfor ? s return 一个 自然数是素数,且它的数字位置经过任意对换后仍为素数,则称为绝对素数。如 13,试求两位数中最大的绝对素数。 set talk off clea max=0 for i=10 to 99 j=mod(i,10) f1=1 for k=2 to i if mod(i,k)=0 f1=0 endif endfor f2=1 for k=2 to j if mod(j,k)=0 f2=0 endif endfor if f1=1 max=i endif 97 endfor ? max return *一个自然数是素 数,且它的数字位置经过任意对换后仍为素数,则称为绝对素数。如 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)=1 f1=1 endif endfor f2=1 for k=2 to j-1 if f2=0 f2=0 endif endfor if f1=1 and f2=1 if mini min=i endif max=i endif endfor ? max-min return 86 设某四位数的各位数字的平方和等于 100,问共有多少个这种四位数? set talk off clea n=0 for x=1000 to 9999 a=int(x/1000) b=int(x-a*1000)/100) c=int(x/10) d=mod(x,10) if a*a+b*b+c*c+d*d=100 n=n+x 49 37 endif endfor ? n set talk on return *设某 四位数的各位数字的立方和等于 168,问共有多少个这种四位数? set talk off clea n=0 for x=1000 to 9999 a=int(x/1000) b=int(x/100) c=int(mod(x,100)/10) d=mod(x,10) if a*a*a+b*b*b+c*c*c+d*d*d=168 n=x endif endfor ? n set talk on return 12 设某四位数的各位数字的立方和等于 168,问满足这种条件的四位数且是奇数的数共有多少个? set talk off clea n=0 for x=1000 to 9999 a=int(x/1000) b=int(x-a*1000)/100) c=int(x/10) d=mod(x,10) if a*3+b*3+c*3+d*3=168 n=n+1 endif endfor ? n set talk on return 6 设某四位数的各位数字的立方和等于 198,问满足这种条件的四位数且是偶数的数共有多少个? set talk off clea n=1 for x=1000 to 9999 12 a=int(x/1000) b=int(x-a*1000)/100) c=mod(x,100) d=mod(x,10) if a*a*a+b*b*b+c*c*c+d*d*d=198 n=n+1 endif endfor ? n set talk on return 设某四位数的各位数字的立方和等于 100,问满足这种条件的四位数且是素数的数共有多少个? set talk off clea n=0 for x=1000 to 9999 f=1 for i=2 to int(sqrt(x) if mod(i,x)=0 f=0 exit endif endfor if f=0 a=int(x/1000) b=int(x-a*1000)/100) c=int(mod(x,100)/10) d=mod(x,10) if a*a*a+b*b*b+c*c*c+d*d*d=100 n=n+1 endif endif endfor ? n set talk on return 4 设某四位数的各位数字的平方和等于 100,问满足这种条件的四位数且是素数的数共有多少个? set talk off clea n=0 for x=1000 to 9999 f=1 for i=2 to int(sqrt(x) 5 if mod(x,i)=0 f=0 exit endif endfor if f=0 a=int(x/1000) b=int(x-a*1000)/100) c=mod(x,100) d=mod(x,10) if a*a+b*b+c*c+d*d=100 n=n+i endif endif endfor ? n set talk on return 设某四位数的各位数字的平方和等于 100,问满足这种条件的最大的四位 数且是素数的数是多少? set talk off clea max=1000 for x=1000 to 9999 f=1 for i=2 to x if mod(x,i)=0 f=0 exit endif endfor if p=0 a=int(x/1000) b=int(x-a*1000)/100) c=int(mod(x,100)/10) d=mod(x,10) if a*a+b*b+c*c+d*d=100 max=a+b+c+d endif endif endfor ? max set talk on return 9133 设某四位数的各位数字的平方和等于 100,问满足这 1933 38 种条件的最小的四位数且是素数的数是多少? set talk off clea min=9999 for x=1000 to 9999 f=1 for i=2 to int(sqrt(x) if mod(i,x)=0 f=0 exit endif endfor if f=0 a=int(x/1000) b=int(x-a*1000)/100) c=int(mod(x,100)/10) d=mod(x,10) if a*a+b*b+c*c+d*d=100 min=x loop endif endif endfor ? min set talk on return 设某四位数的各位数字的平方和等于 100,问满足这种条件的最大数和最小数之差是多少? set talk off clea min1=0 max1=1000 for x=1000 to 9999 a=int(x/1000) b=int(x-a*1000)/100) c=mod(x,100) d=mod(x,10) if a*a+b*b+c*c+d*d=100 if max1x min1=x endif endif endfor 8154 ? max1-min1 set talk on return 设某四位数的各位数字的平方和等于 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=mod(x,100) d=mod(x,10) if a*a+b*b+c*c+d*d=198 if max1x x=min1 endif endif endfor ? max1+min1 set talk on return 12749 把一张一元钞票 ,换成一分、二分和五分硬币 ,每种至少 11 枚 ,问有多少种方案 ? set talk off clea n=0 for yi=11 to 100 for er=11 to 20 for wu=11 to 20 if yi+er+wu=100 n=n+1 endif endfor endfor endfor ? n set talk on return 13 把一张一元钞票 ,换成一分、二分和五分硬币 ,每种至少 1 枚 ,问有多少种方案 ? 461 set talk off clea n=1 for yi=1 to 100 for er=1 to 50 for wu=1 to 20 if yi+er+wu=100 n=n endif endfor endfor endfor ? n set talk on return 把一张一元钞票 ,换成一分、二分和五分硬币 ,每种至少 1枚 ,问兑换后硬币总数为 50枚的兑换方案有多少种 ? set talk off clea n=1 for yi=1 to 100 for er=1 to 50 for wu=1 to 10 if yi+er+wu=50 n=n+1 endif endfor endfor endfor ? n set talk on return 12 把一张一元钞票 ,换成一分、二分和五分硬币 ,每种至少 1 枚 ,问兑换后硬币总数最多的与硬币总数最少的枚数之差是多少 ? set talk off clea min1=10000 max1=0 for yi=1 to 100 for er=1 to 50 for wu=1 to 20 if yi+er+wu=100 t=yi+er+wu 73 39 if tmax1 t=max1 endif if min1t min1=t endif endif endfor endfor endfor ? max1-min1 set talk on return 把一张一元钞票 ,换成一分、二分和五分硬币 ,每种至少 1枚 ,问兑换后其中二分的硬币恰有 20枚的方案共有多少种 ? set talk off clea n=1 for yi=1 to 50 for wu=1 to 20 wu=20 if yi+er*2+wu*5=1000 n=n+1 endif endfor endfor ? n set talk on return 11 找满足以下条件 : X2+Y2+Z2=412 且 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 maxx+y+z max=x+y+z endif endif endfor endfor 71 endfor ? max set talk on return 找满足以下条件 : X2+Y2+Z2=412 (XYZ) 且X+Y+Z之值最小的三个正整数 X,Y,Z, 求 X+Y+Z之值 . set talk off clea min=0 for x=0 to 41 for y=x+1 to 41 for z=y to 41 if x+y+z=41 if mins nu=nu+1 endif endfor ? nu set talk on return 28 已知 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=1 for i=1 to n if mod(i,n)=0 s=s+1 endif endfor if mod(n,s)=0 sm=sm+1 endif endfor ? sm set talk on return 36550 1. 求 10,1000内所 40 有能被被 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 s3000 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 s5000 & 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 t1000 & 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 改为 s2 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 s100000 exit endif a=2+a & 去掉 a=2+a 该句 endfor ? n set talk on return & 结果为: 17 34. 求出 45678 的所有非平凡因子(即除 1 和它本身以外的约数)中是奇数的因子个数。 set talk off 41 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 a5000 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=n3 s=s+a if s88888 exit endif endfor ? a & ?a 改为 ?n set talk on return & 结果为: 24 54. 设一数列 f(n): f(1)=1,当n1 时 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 f0.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 lett54321 n=n+1 42 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 f0.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. 回文指的是正读和反读都一样的一串字符,如 121、 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 中较大的一个数。(提示:设A0 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 43 89. 已知数列 f(n):f(1)=1,f(2)=1,当 n2 时 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=11 s=f(n) endif endfor ? s set talk on return & 答案: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,若 ABC且 A*A+B*B=C*C,则称 A,B,C为一组勾股弦数,其中 A、 B、 C分别称为勾、股、弦。试求出弦为 25000 的勾股弦数组的个数。 set talk off clear c=25000 n=1 for a=1 to c-1 b=int(sqrt(c*c-a*a) if a*a+b*b=c*c and ab n=n+a endif endfor ? n set talk on return & 答案 : 5 95. 求方程 3x-7y=1 在条件|x|100 且 |y|40 下的整数解的个数。 set 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 n=n+x endif endfor ? n set talk on return & 答案 : 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 296 、 找 满 足 以 下 条 件 : X2+Y2+Z2=412 且 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 x2+y2+z2=41*41 if maxx+y+z max=x+y+z endif endif endfor endfor endfor ? max set talk on return 答案: 71 295、把一张一元钞票 ,换成一分、二分和五分硬币 ,每种至少 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 44 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 mini min=i endif max=i endif endfor ? max-min Return 答案: 86 276、 水仙花数 是指这样的数,其各位数字的立方和等于该数本身,如 :153=13+53+33。编写程序,计算从 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 si s=i endif endif endfor ? s Return 答案: 407 273、设有一个 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 269、若一个四位正整数是另一个正整数的平方,且各位数字的和是一个平方数,则称该四位正整数是 四位双平方数 。例如: 由于 7396=862 ,且7+3+9+6=25=52,则称 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 264、编写程序,求所有符合算式 ij*ji=1300 的最大数 ij(即i*10+j)。其中 i、 j 是 19 之间的一位整数。 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 max10*i+j max=10*i+j endif endif endfor endfor ? max Return 答案: 52 261、勾股弦数是满足公式: A2+B2=C2 (假定 ABBC。 求 A, B, C 均小于或等于 100 的倒勾股数有多少组? set talk off clear n=0 for a=1 to 100 for b=1 to 100 for c=1 to 100 if 1/(a2)+1/(b2)=1/(c2) and ab and bc and bc ? a,b,c n=n+1 endif endfor endfor endfor ? a,b,c 均小于或等于 100 的倒勾股数有 45 +str(n)+组 set talk on return 求 A, B, C 之和小于 100 的倒勾股数有多少组? set talk off clear n=0 for a=1 to 100 for b=1 to 100 for c=1 to 100 if 1/a2+1/b2=1/c2 and ab and bc and a+b+cb and bc ? a,b,c IF MAXb and bc ? a,b,c S=S+A endif endfor endfor endfor ? a 值的和 是 ,S set talk on return 3、 已知 Aa+b min=a+b &提示:当 A=x if maxfx f0=fx x0=x endif endfor ? x0 set talk on return 6、 求 351, 432之间所有既不能被 3 整除,又不能被 8 整除的正整数的个数。 set talk off clear n=0 for x=351 to 432 if mod(x,3)0 and mod(x,8)0 n=n+1 endif endfor ? n set talk on return 7、 求 1-5000 之间能同时被 3 和 7 整除的数的个数。 set talk off clear n=0 for x=1 to 5000 if mod(x,3)=0 and mod(x,7)=0 n=n+1 endif endfor ? n set talk on return 8、 有一个分数序列: 2/1, 3/2, 5/3, 8/5,13/8, 21/13(注:该数列从第二项开始,其分子是前项的分子与分母的和,而其分母是前一项的分子),求出这个序列前 24 项的和。要求:按四舍五入的方式精确到小数点的后第二位。 方法一: set talk off clear s=0 f1=2 f2=1 for n=1 to 24 s=s+f1/f2 f=f1+f2 f2=f1 f1=f endfor ? round(s,2) set talk on return 方法二: set talk off clear s=0 a=2 &分子 b=1 &分母 for n=1 to 24 s=s+a/b a=a+b b=a-b endfor ? round(s,2) set talk on return 9、 已知 Fibonacci 数列: 1,1,2,3,5,8,它可由下面公式表述: F(1)=1 if n=1 F(2)=1 if n=2 F(n)=F(n-1)+F(n-2) if n2 试求 F(45)值。 set talk off clear dime f(45) f(1)=1 f(2)=1 for n=3 to 45 f(n)=f(n-1)+f(n-2) endfor ? f(45) set talk on return 10、设某国今年的国民生产总值为 45600亿元,若今后每年以 8%的增长率增长,计算多少年后能实现国民生产总值翻两番? set talk off clear 最小BA BA 716699 46 s=45600 n=0 do while s4*45600 s=s*1.08 n=n+1 enddo ? n set talk on return 11 、 勾股弦数是满足公式: A2+B2=C2 (假定 ABC)的一组正整数( A, B, C),例如,( 3, 4, 5)是勾股弦数,因 为: 32+42=52。求 A, B均小于 25且 A+B+C=100的勾股弦数的个数。 set talk off clear n=0 for a=1 to 25 for b=1 to 25 for c=1 to 100 if a2+b2=c2 and a+b+c100 and ab and bc n=n+1 ? a,b,c &输出 A, B, C 的值 endif endfor endfor endfor ? n set talk on return 12、 若某整数平方等于某两个正整数平方之 和的正整数称为弦数。例如:由于32+42=52,则 5 为弦数,求 100, 200之间弦数 的数目 。 set talk off clea n=0 for c=100 to 200 for a=1 to c-1 b=c2-a2 if int(sqrt(b)*int(sqrt(b)=b ? c n=n+1 exit endif endfor endfor ? n set talk on return 13、 设有 6 个十进制数字 a,b,c,d,f,e,求满足 abcdfe=fdcba 条 件 的 五位 数abcdf(a0,e0,e1)的个数。 set talk off clear n=0 for a=1 to 9 for b=0 to 9 for c=0 to 9 for d=0 to 9 for f=0 to 9 for e=2 to 9 if (a*10000+b*1000+c*100+d*10+f)*e=f*10000+d*1000+c*100+b*10+a n=n+1 ? a,b,c,d,f,e endif endfor endfor endfor endfor endfor endfor ? n set talk on return 14、 设某四位数的各位数字的立方和等于 100,试问有多少个这样的四位数? set talk off clear n=0 for i=1000 to 9999 a=int(i/1000) b=int(i-a*1000)/100) c=int(mod(i,100)/10) d=i%10 if a2+b2+c2+d2=100 n=n+1 endif endfor ? n 15、 求方程 8x-5y=3,在 |x|=150, |y|=200内的整数解。试问这样的整数 解中 x+y|的最大值是多少? set talk off clear for x=-150 to 150 for y=-200 to 200 if 8*x-5*y=3 max=x+y endif endfor endfor ? max set talk on return 16 、已知: A1=1, A2=1/(1+A1), A3=1/(1+A2), An=1/(1+An-1), , 求 A50。(按四舍五入的方式精确到小数点后第三位)。( 0.618) set talk off clear a=1 for i=2 to 50 a=1/(a+1) endfor ? A50=,round(a,3) set talk on return 17、 有一个三位数满足下列条件 : (1)此三位数的三位数字各不相同 ; (2)此三位数等于它的各位数字的立方和。试求这种三位数共有多少个? ( 4) set talk off clear n=0 for i=100 to 999 a=int(i/100) b=int(i-a*100)/10) c=i%10 if a3+b3+c3=i and ab and ac and bc n=n+1 endif endfor ? n set talk on return 18、 已知 求 f(0)到 f(50)中的最大值。( 598325) set talk off clear dime f(50) f(1)=1 f(2)=0 f(3)=-1 max=0 for n=4 to 50 f(n)=f(n-1)-2*f(n-2)+f(n-3) if max=i f=i for k=2 to (f-2)-1 if mod(f-2,k)=0 exit endif if k=f-2-1 ? f,f-2 n=n+1 endif endfor endif endfor ?n 20、 数列 称为 e 数列,每一 个 e(n),( n=1, 2)称为 e 数。求 1, 30000之内的最大的 e数。( 16687) set talk off clear dime f(30) f(1)=1 f(2)=1 n=3 do while n30000 exit endif )2)(3()2(2)1()(0)2(1)1()0(nnfnfnfnffff )2)(2()2()1()1()( 1)2()1( nnennenne ee 47 n=n+1 enddo set talk on return 21、求正整数 1, 500中,能同时满足用3 除余 2,用 5 除余 3,用 7 除余 2 的所有正整数的和。( 1165) set talk off clear s=0 for x=1 to 500 if mod(x,3)=2 and mod(x,5)=3 and mod(x,7)=2 s=s+x endif endfor ? s set talk on return 22、 把一张一元钞票,换成一分、二分和五分硬币,每种至少 8 枚,问有多少种方案 ?( 80) set talk off clear n=0 for yi=8 to 100 for er=8 to 50 for wu=8 to 20 if yi*1+er*2+wu*5=100 n=n+1 endif endfor endfor endfor ? n, set talk on return 23、 斐波那契数列的前二项是 1, 1,其后每一项都是前面两项之和。 求: 10000000 以内最大的斐波那契数? ( 9227465) set talk off clear f1=1 f2=1 do while f1=10000000 f1=f1+f2 f2=f1-f2 enddo ? f2 return 求: 10000000 以内有多少个斐波那契数?( 35) set talk off clea n=1 f1=1 f2=1 do while f1=10000000 f1=f1+f2 f2=f1-f2 n=n+1 ? f2 enddo ? n retu 24、 某些分数的分子和分母都是二位正整数的真分数具有下列特点:如果将该分数的分子的两位数字相加作分子,而将该分数的分母的两位数字相加作分母,得到的新分子跟原分子相等。例如,63/84=( 6+3) /( 8+4)。试求所有具有这种特点的真分子的个数。 set talk off clear n=0 for x=10 to 99 for y=10 to 99 a=int(x/10) b=x%10 c=int(y/10) d=y%10 if x/y=(a+b)/(c+d) and x/y1 n=n+1 endif endfor endfor ?n set talk on return 25、 所谓 同构数 是指这样一个数,它出现在它的平方数的右侧,例如 5 的平方是 25, 25 的平方是 625,故 5 和 25 都是同构数,求 1, 1000之间有多少个同构数。 方法一 set talk off clear n=0 for x=1 to 1000 p=len(alltrim(str(x) m=1 for i=1 to p m=m*10 endfor if mod(x*x,m)=x n=n+1 ? x endif endfor ? n return 25、 方法二 set talk off i=1 n=0 do while i=999 s=i2 if mod(s,1000)=i or mod(s,100)=i or mod(s,10)=i ? i, 是个同构数 n=n+1 endif i=i+1 enddo ? n set talk on return 26、求 300, 400之间最小(大)的一个有奇数个不同因子的整数。 set talk off clear min=400 &如果求最大,此行定义max=300 for i=300 to 400 n=0 for j=1 to i if mod(i,j)=0 n=n+1 endif endfor if mod(n,2)0 if max endif endfor set talk on return 27、在 200, 900范围内同时满足以下两个条件的十进制数 . 其个位数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论