程序(真题选 - 附部分答案)

更新时间:2023-10-26 16:09:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

程序操作题

一、特殊数字问题

编程求所有的水仙花数。水仙花数是指这样的三位数,其各位数字的立方和等于该数本身。如: 13+53+33=153

clear && 清理屏幕 for i=100 to 999 && 判断的范围定围100到999 a=int(i/100) && 分离出i的百位 b=int(i/10) && 分离除出i的十位 c=i && 分离出i的个位 if i=a^3+b^3+c^3 && 判断是否满足条件 ?i && 显示水仙花数的值 endif endfor retu

(答案:153 370 371 407)

回文数是指正读和反读都一样的正整数。例如1221是回文数。求出[1000,9999]以内的所有回文数的个数。

clear && 清理屏幕 n=0 && 用来保存回文数的个数 for i=1000 to 9999 && 判断的范围 qw=int(i/1000) && 分离出i的千位 bw=int(i/100)-qw*10 && 分离出i的百位 sw=int(i/10)-int(i/100)*10 && 分离除出i的十位

gw=mod(i,10) && 分离出i的个位

if qw=gw and bw=sw &&如果千位和个位相等并且十位和百位相等

n=n+1 && 累加求和 ?n,i && 显示回文数的个数,值 endif

endfor (答案:90)

同构数是指这样一个正整数,它出现在它的平方数的右边。例如 5 的平方是 25,5出现在其平方数25的右边,25 的平方是 625,25 出现在其平方数 625 的右边,因此 5 和 25 都是同构数。求[2,1000]之间同构数的个数。(提示:若x是m位同构数,则x的平方除以)(10的m次方的余数就是x

若x是m位同构数,则x的平方除以10的m次方的余数就是x)

clear n=0

for x=2 to 1000 y=x*x

m=len(ltrim(str(x))) && 设x是m位数 if mod(y,10^m)=x n=n+1 endif endfor ? n retu

(答案:6)

若一个四位正整数是另一个正整数的平方,且各位数字的和是一个平方数,则称该四位正整数是“四位双平方数”。例如:由于7396=86^2,且

7+3+9+6=25=5^2,则称7396是“四位双平方数”。求所有“四位双平方数”的和。 clear s=0

for i=1000 to 9999 a=int(i/1000)

b=mod(int(i/100),10) c=mod(int(i/10),10) d=mod(i,10) x=a+b+c+d

if int(sqrt(x))*int(sqrt(x))=x and int(sqrt(i))*int(sqrt(i))=i

&&if sqrt(x)=int(sqrt(x)) and sqrt(i)=int(sqrt(i)) s=s+i endif endfor ? s return

(答案:81977)

勾股数组(勾股弦数)是满足公式: A^2+B^2=C^2 (假定A

n=0 && 用来保存倒勾股数组的个数 for c=1 to 100 && c的判断的范围定为1到100 for b=1 to c && b的判断的范围定为1到c a=int(sqrt(c*c-b*b)) if a*a+b*b=c*c and a

endfor

endfor ? n return 答案(52) 倒勾股数是满足公式: 1/A^2+1/B^2=1/C^2 的一组正整数(A,B,C),例如,(156,65,60)是倒勾股数,因为:1/156^2+1/65^2=1/60^2。假定A>B>C,求A,B,C均小于或等于100的倒勾股数有多少组? clear && 清理屏幕 n=0 && 用来保存倒勾股数组的个数 for a=1 to 100 && 判断的范围定为1到100 for b=1 to a && 判断的范围定为1到a c=sqrt(1/a^2+1/b^2) && c的值为1/a^2+1/b^2开平方 if 1/c=int(1/c) and sqrt(1/c)<=100 && 如果1/c是平方数且c不超过100 n=n+1 && 计数器+1 ? n,a,b,int(1/c) && 显示个数,a,b,c 及他们产生的平方数 endif endfor endfor ? n retu 对自然数A、B、C,若A3 exit endif endfor retu (答案:959) 求出20677和42067的最大公约数 clear a=20677 b=42067 for d=1 to a if mod(a,d)=0 and mod(b,d)=0 max=d endif endfor ? max return 答案: 713 求出 9269 和 8671 的最小公倍数。(算法提示:a与b的最小公倍数是 a 的倍数中第1个被b整除的

数。) clear a=9269 b=8671

for k=a to a*b step a if mod(k,b)=0 exit endif endfor ? k return

(答案:268801)

500之内能被3或7整除但不能被5和2整除,求满足以上条件的数的个数与他们的和。 clear

n=0 && 保存满足条件的个数 s=0 && 保存满足条件的数的和 for i=1 to 500

if (mod(i,3)=0 or mod(i,7)=0) and mod(i,2)!=0 and mod(i,5)!=0

&& if (mod(i,3)=0 or mod(i,7)=0) and not (mod(i,2)=0 or mod(i,5)=0)

&& 判断是否满足“能被3或7整除但不能被2和5整除”

n=n+1 && 计数器+1 s=s+i && 累加求和 endif endfor ?n,s

三、因子问题

求559399的所有非平凡因子(即除1和它 本身以外的约数)中最小的 clear a=559399 for n=2 to a if mod(a,n)=0 ?n

exit endif endfor

return

答案:73 求出203267的所有真因子(即小于它

本身的约数)中最大的因子数 clear a=203267 n=0

for b=1 to a-1 if mod(a,b)=0 max=b endif endfor

? max return

利用分解质因数的方法求出18000中含有质因数的个数(相同的重复计数,例如,180中含有5个质因数:2、2、3、3、5)。 set talk off clear x=18000 n=0 k=2

do while x>1 if mod(x,k)=0 n=n+1 x=x/k loop endif k=k+1 enddo ? n

set talk on return

利用分解质因数的方法求出18000中的最大质因数(例如,180中最大质因数为5)。 set talk off set talk off clear a=18000 max=1 b=2

do while a>1 if mod(a,b)=0 max=b && ?b a=a/b

loop endif b=b+1 enddo ? max

set talk on return

某些分子和分母都是二位正整数的真分数具有下列特点:如果将该分数的分子个位数和分母十位数同时去掉,所得结果正好等于原分数约分后的结果,例如16/64=1/4,求满足上述条件的所有真分数个数。 clea n=0

for i=10 to 98 for j=i+1 to 99 a=int(i/10) b=mod(j,10)

if i/j=a/b and b<>0 n=n+1 endif endfor endfor ?n retu

若某真分数满足下述条件: ①分子分母都是两位正整数;

②分子的两位数字之和与分母的两位数字之和组成新的分数,该分数与原分数的值相等,如:63/84=(6+3)/(8+4)。

求所有具有这种特点的真分子(非约简真分数)的个数以及分子与分母之和的和。 clear n=0 s=0

for a=11 to 99 && 分母 for b=10 to a-1 && 分子 a1=int(a/10) a2=mod(a,10) b1=int(b/10) b2=mod(b,10)

if (b1+b2)*a=b*(a1+a2) n=n+1 s=s+a+b *?a,b,s endif endfor endfor ? n,s return

分子分母为正整数,分子小于分母且分子分母无公因数的分数称为最简真分数。对于分数的分母取值范围为 [50, 90] 时的最简真分数共有多少个? clea n=0

for a=2 to 89 && 分子 for b=50 to 90 && 分母

if a

&& 判断分子和分母是否有公约数 gyz=x && 有公约数则不是最简真分数 exit endif endfor

if gyz=1 && 没有公约数则是最简真分数 n=n+1 endif endif endfor endfor ? n return endfor

一个正整数如果恰好等于其所有真因子之和,则称这个数为“完数”,(整数n的真因子是指除n以外的所有能整除n的数,如28的真因子有:1、2、4、7、14)。求[1,1000]中所有完数之和。 clear

set talk off n=0 s=0

for i=2 to 1000 t=0

for j=1 to i-1

if mod(i,j)=0 && j是i的真因子 t=t+j && 真因子之和 endif endfor

if t=i && i与其真因子之和t相等 n=n+1 s=s+i ?i endif endfor

?'n =',str(n,5) ?'s =',str(s,7) set talk on return

若某整数n的所有因子之和是n的倍数,则称 n 为多因子完备数,如28,其所有因子之和为56。求[1,500]之间有多少个多因子完备数。 clear

set talk off n=0

for i=1 to 500

t=0 && 存放所有因子之和 for j=1 to i if mod(i,j)=0

t=t+j && 所有因子之和 endif endfor

if mod(t,i)=0 &&因子之和是i的倍数 n=n+1 ?i endif endfor

?'n =',str(n,5) set talk on return

四、素数问题

素数 —— 仅能被1和它本身整除的数。编程求出[100,200]的素数的个数与他们的和。 set talk off clea n=0 s=0

for i=100 to 200

for j=2 to i-1 if mod(i,j)=0 exit endif endfor if j=i n=n+1 s=s+i endif endfor ? n,s return

一个自然数是素数,且它的数字位置经过任意对换后仍为素数,则称为绝对素数。如13,试求所有两位绝对素数的个数。 s=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 s=s+1 endif endfor ? s return

梅森尼数是指能使2^n-1为素数的数n,求[1, 21]范围内梅森尼数的最大值以及个数与和? set talk off clea max=0 s=2 n=0

本文来源:https://www.bwwdw.com/article/1hk2.html

Top