程序真题选附部分答案1.docx
- 文档编号:10152631
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:35
- 大小:24.96KB
程序真题选附部分答案1.docx
《程序真题选附部分答案1.docx》由会员分享,可在线阅读,更多相关《程序真题选附部分答案1.docx(35页珍藏版)》请在冰豆网上搜索。
程序真题选附部分答案1
程序操作题
一、特殊数字问题
编程求所有的水仙花数。
水仙花数是指这样的三位数,其各位数字的立方和等于该数本身。
如:
13+53+33=153
clear&&清理屏幕
fori=100to999&&判断的范围定围100到999
a=int(i/100)&&分离出i的百位
b=int(i/10)%10&&分离除出i的十位
c=i%10&&分离出i的个位
ifi=a^3+b^3+c^3&&判断是否满足条件
?
i&&显示水仙花数的值
endif
endfor
retu
(答案:
153370371407)
回文数是指正读和反读都一样的正整数。
例如1221是回文数。
求出[1000,9999]以内的所有回文数的个数。
clear&&清理屏幕
n=0&&用来保存回文数的个数
fori=1000to9999&&判断的范围
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的个位
ifqw=gwandbw=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
forx=2to1000
y=x*x
m=len(ltrim(str(x)))&&设x是m位数
ifmod(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
fori=1000to9999
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
ifint(sqrt(x))*int(sqrt(x))=xandint(sqrt(i))*int(sqrt(i))=i
&&ifsqrt(x)=int(sqrt(x))andsqrt(i)=int(sqrt(i))
s=s+i
endif
endfor
?
s
return
(答案:
81977)
勾股数组(勾股弦数)是满足公式:
A^2+B^2=C^2(假定A
3^2+4^2=5^2。
求A,B,C均小于或等于100的勾股弦数的个数。
clear
n=0&&用来保存倒勾股数组的个数
forc=1to100&&c的判断的范围定为1到100
forb=1toc&&b的判断的范围定为1到c
a=int(sqrt(c*c-b*b))
ifa*a+b*b=c*canda n=n+1&&计数器+1 ? n,a,b,c&&显示个数,a,b,c endif 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&&用来保存倒勾股数组的个数 fora=1to100&&判断的范围定为1到100 forb=1toa&&判断的范围定为1到a c=sqrt(1/a^2+1/b^2)&&c的值为1/a^2+1/b^2开平方 if1/c=int(1/c)andsqrt(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,若A 试求出弦为[100,300]内符合条件的数有多少组? clear n=0 forc=100to300 forb=1toc fora=1tob ifa*a+b*b=c*c n=n+1 endif endfor endfor endfor ? n return 二、整除问题 爱因斯坦走台阶——有一台阶,如果每次走两阶,最后剩一阶;如果每次走三阶,最后剩两阶;如果每次走四阶,最后剩三阶;如果每次走五阶,最后剩四阶;如果每次走六阶,最后剩五阶;如果每次走七阶,刚好走完。 求满足上述条件第三小的台阶数是多少? clear c=0 fori=1to10000 ifmod(i,3)=2andmod(i,4)=3andmod(i,5)=4 andmod(i,6)=5andmod(i,7)=0 c=c+1 ? c,i endif ifc>3 exit endif endfor retu (答案: 959) 求出20677和42067的最大公约数 clear a=20677 b=42067 ford=1toa ifmod(a,d)=0andmod(b,d)=0 max=d endif endfor ? max return 答案: 713 求出9269和8671的最小公倍数。 (算法提示: a与b的最小公倍数是a的倍数中第1个被b整除的数。 ) clear a=9269 b=8671 fork=atoa*bstepa ifmod(k,b)=0 exit endif endfor ? k return (答案: 268801) 500之内能被3或7整除但不能被5和2整除,求满足以上条件的数的个数与他们的和。 clear n=0&&保存满足条件的个数 s=0&&保存满足条件的数的和 fori=1to500 if(mod(i,3)=0ormod(i,7)=0)andmod(i,2)! =0andmod(i,5)! =0 &&if(mod(i,3)=0ormod(i,7)=0)andnot(mod(i,2)=0ormod(i,5)=0) &&判断是否满足“能被3或7整除但不能被2和5整除” n=n+1&&计数器+1 s=s+i&&累加求和 endif endfor ? n,s 三、因子问题 求559399的所有非平凡因子(即除1和它 本身以外的约数)中最小的 clear a=559399 forn=2toa ifmod(a,n)=0 ? n exit endif endfor return 答案: 73 求出203267的所有真因子(即小于它 本身的约数)中最大的因子数 clear a=203267 n=0 forb=1toa-1 ifmod(a,b)=0 max=b endif endfor ? max return 利用分解质因数的方法求出18000中含有质因数的个数(相同的重复计数,例如,180中含有5个质因数: 2、2、3、3、5)。 settalkoff clear x=18000 n=0 k=2 dowhilex>1 ifmod(x,k)=0 n=n+1 x=x/k loop endif k=k+1 enddo ? n settalkon return 利用分解质因数的方法求出18000中的最大质因数(例如,180中最大质因数为5)。 settalkoff settalkoff clear a=18000 max=1 b=2 dowhilea>1 ifmod(a,b)=0 max=b &&? b a=a/b loop endif b=b+1 enddo ? max settalkon return 某些分子和分母都是二位正整数的真分数具有下列特点: 如果将该分数的分子个位数和分母十位数同时去掉,所得结果正好等于原分数约分后的结果,例如16/64=1/4,求满足上述条件的所有真分数个数。 clea n=0 fori=10to98 forj=i+1to99 a=int(i/10) b=mod(j,10) ifi/j=a/bandb<>0 n=n+1 endif endfor endfor ? n retu 若某真分数满足下述条件: ①分子分母都是两位正整数; ②分子的两位数字之和与分母的两位数字之和组成新的分数,该分数与原分数的值相等,如: 63/84=(6+3)/(8+4)。 求所有具有这种特点的真分子(非约简真分数)的个数以及分子与分母之和的和。 clear n=0 s=0 fora=11to99&&分母 forb=10toa-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 fora=2to89&&分子 forb=50to90 &&分母 ifa gyz=1&&公因子 forx=2toa ifmod(a,x)=0andmod(b,x)=0 &&判断分子和分母是否有公约数 gyz=x&&有公约数则不是最简真分数 exit endif endfor ifgyz=1&&没有公约数则是最简真分数 n=n+1 endif endif endfor endfor ? n return endfor 一个正整数如果恰好等于其所有真因子之和,则称这个数为“完数”,(整数n的真因子是指除n以外的所有能整除n的数,如28的真因子有: 1、2、4、7、14)。 求[1,1000]中所有完数之和。 clear settalkoff n=0 s=0 fori=2to1000 t=0 forj=1toi-1 ifmod(i,j)=0&&j是i的真因子 t=t+j&&真因子之和 endif endfor ift=i&&i与其真因子之和t相等 n=n+1 s=s+i ? i endif endfor ? 'n=',str(n,5) ? 's=',str(s,7) settalkon return 若某整数n的所有因子之和是n的倍数,则称n为多因子完备数,如28,其所有因子之和为56。 求[1,500]之间有多少个多因子完备数。 clear settalkoff n=0 fori=1to500 t=0&&存放所有因子之和 forj=1toi ifmod(i,j)=0 t=t+j&&所有因子之和 endif endfor ifmod(t,i)=0&&因子之和是i的倍数 n=n+1 ? i endif endfor ? 'n=',str(n,5) settalkon return 四、素数问题 素数——仅能被1和它本身整除的数。 编程求出[100,200]的素数的个数与他们的和。 settalkoff clea n=0 s=0 fori=100to200 forj=2toi-1 ifmod(i,j)=0 exit endif endfor ifj=i n=n+1 s=s+i endif endfor ? n,s return 一个自然数是素数,且它的数字位置经过任意对换后仍为素数,则称为绝对素数。 如13,试求所有两位绝对素数的个数。 s=0 fori=10to99 j=mod(i,10)*10+int(i/10) f1=1 fork=2toi-1 ifmod(i,k)=0 f1=0 endif endfor f2=1 fork=2toj-1 ifmod(j,k)=0 f2=0 endif endfor iff1=1andf2=1 s=s+1 endif endfor ? s return 梅森尼数是指能使2^n-1为素数的数n,求[1,21]范围内梅森尼数的最大值以及个数与和? settalkoff clea max=0 s=2 n=0 h=0 forx=2to21 s=s*2&&s存放2^x flag=1 fori=2toint(sqrt(s-1)) ifmod(s-1,i)=0&&判断s即2^x-1是否为素数 flag=0 exit endif endfor ifflag=1 ? x max=x&&最大值 n=n+1&&个数 h=h+x&&和 endif endfor ? max ? n,h return 若两个素数之差为2,则称这两个素数为双胞胎数。 求[200,1000]内双胞胎数的对数与最大一对双胞胎数的和。 clea n=0 fori=200to998 a=2 b=int(sqrt(i)) dowhilea<=bandmod(i,a)! =0 a=a+1 enddo ifa>b j=i+2 c=2 d=int(sqrt(j)) dowhilec<=dandmod(j,c)! =0 c=c+1 enddo ifc>d n=n+1 ma=i*存放最大的a mb=j*存放最大的b endif endif endfor ? n,”对” ? '最大的一对双胞胎数为: ',ma,mb ? '最大的一对双胞胎数之和为: ',ma+mb return 若两个连续的自然数的乘积减1后是素数,则称这两个连续自然数为友数对,该素数称为友素数,如: 2*3-1=5,因此2与3是友数对,5是友素数,求[2,49]之间有多少友数对。 clea n=0 fori=2to48 k=i*(i+1)-1 flag=1 forj=2tosqrt(k) ifmod(k,j)=0 flag=0 exit endif endfor ifflag=1 n=n+1 endif endfor ? n 如果一个素数从个位开始自右向左逐个去掉每位数字后,每次所得的数都是素数,则称该数为超级素数,求[100,999]内超级素数的个数。 clear n=0&&超级素数个数 S=0&&超级素数和 fori=100to999&&判断的范围定围100到999 ifprime(i)andprime(int(i/10))andprime(int(i/100)) &&如果i是素数并且i去掉个位是素数去掉十位是素数 n=n+1&&计数器加1 s=s+i&&累加器加i ? n,i&&显示超级素数的个数与值 endif endfor ? n,s functionprime(x)&&函数prime用来判断一个数是否为素数 如果一个素数其各位数字均不为0,而且从高位开始依次去掉每位数字后,每次所得仍为素数(1不是素数),则称该数为逆向超级素数。 例如,617,17,7都是素数,因此617是逆向超级素数,尽管503,03,3都是素数,但它不是逆向超级素数,因为它包含有0。 试求[100,999]之内的所有逆向超级素数的个数及和。 clear n=0&&超级素数个数 S=0&&超级素数和 fori=100to999&&判断的范围100到999 ifprime(i)andprime(mod(i,100))andmod(i,100)>10andprime(mod(i,10))andmod(i,10)! =0 *如果i是素数并且i去掉百位是素数去掉十位是素数,且都不包含0 n=n+1&&计数器加1 s=s+i&&累加器加i ? n,i&&显示逆向超级素数的个数与值 endif endfor ? n,s functionprime(x) &&函数prime用来判断一个数是否为素数 functionprime(x) docase casex=0orx=1 return(.f.) casex=2 return(.t.) otherwise forj=2tosqrt(x) ifx%j=0 return(.f.) endif endfor ifj>sqrt(x) return(.t.) endif endcase 德国数学家哥德巴赫曾猜测: 任何大于6的偶数都可以分解成两个素数(素数对)的和。 但有些偶数可以分解成多种素数对的和,如: 10=3+7,10=5+5,即10可以分解成两种不同的素数对。 试求1234可以分解成多少种不同的素数对(注: A+B与B+A认为是相同素数对) clear&&清理屏幕 c=0&&用来保存素数对的个数 a=1234&&用变量来存放需拆分的数 fori=2toa/2&&判断的范围定围2到a除以2 ifprime(i)andprime(a-i)&&如果i是素数并且a-i也是素数 c=c+1&&素数对的个数 ? c,int(i),int(a-i)&&显示素数对的个数,值 endif endfor &&函数prime用来判断一个数是否为素数 functionprime(x) forj=2tosqrt(x) ifx%j=0 return(.f.) endif endfor ifj>sqrt(x) return(.t.) endif 五、数列问题 编程求Fibonacci数列: 1,1,2,3,5,8……的第30个数,如下所示,求fib(30) fib (1)=1n=1F1=1 fib (2)=1n=2F2=1 fib(n)=fib(n-1)+fib(n-2)n>=3FN=FN-1+FN-2 settalkoff clear f1=1 f2=1 forn=3to30 f3=f1+f2 f1=f2 f2=f3 endfor ? f3 settalkon return 求1! +3! +5! +…+(2K+1)! ,要求在其和大于20000时中止程序运行。 clea i=0 s=0 dowhile.T. i=i+1 ifi%2=0 loop endif ifs>20000 exit endif s=s+jieceng(i) enddo ? s 利用格里高利公式: α/4=1-1/3+1/5-1/7+1/9-1/11+…-1/99, 求α的值。 要求: 按四舍五入的方式精确到小数点后第二位。 settalkoff clear s=0 k=-1 fori=1to99step2 k=-k s=s+k/i endfor ? round(4*s,2) settalkon retu E数列 E数列满足下列公式: 数列E (1)=E (2)=1E(n)=(n-1)*E(n-1)+(n-2)*E(n-2)(n>2)每一个E(n),(n=1,2,…)称为E数。 求[1,30000]之内E数的个数。 求不超过30000的最大E数的值。 clea settalkoff a=1 b=1 n=2 t=1 dowhileb<30000 maxb=t c=b b=(n-1)*b+(n-2)*a a=c ifb>maxb t=b endif n=n+1 enddo ? maxb ? n settalkon return 已知某数列满足下列公式: f(0)=f (1)=1 f (2)=0 f(n)=f(n-1)-2f(n-2)+f(n-3)(n>2) 求f(10)到f(60)的和。 clea dimef(100) sum1=0 f (1)=1 f (2)=1 f(3)=0 forn=4to61 f(n)=f(n-1)-2*f(n-2)+f(n-3) endf fori=11to61 sum1=sum1+f(i) endf ? sum1 retu 已知一个由分数组成的数列: 1/2,2/3,3/5,5/8,8/13,…,其特点: 是从第2个分数起,每个分数的分子都是前一分数的分母而其分母都是其前一分数的分子与分母之和。 试求出此数列的前20项之和(要求按四舍五入的方式精确到小数点后第二位)。 clear f1=1 f2=2 s=0 forn=1to20 s=s+f1/f2 f=f1+f2 f1=f2 f2=f endfor ? round(s,2) return 求出100以内最小的自然数n,使得从1开始的连续n个自然数的倒数之和大于3.6。 settalkoff clear s=0 forn=1to100 s=s+1/n ifs>3.6 exit endif endfor ? n settalkon return 闰年问题 编程求从1000年到2050之间有多少闰年
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 真题选附 部分 答案