VFP趣味程序设计.docx
- 文档编号:23349130
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:29
- 大小:20.01KB
VFP趣味程序设计.docx
《VFP趣味程序设计.docx》由会员分享,可在线阅读,更多相关《VFP趣味程序设计.docx(29页珍藏版)》请在冰豆网上搜索。
VFP趣味程序设计
5.舍罕王的失算
settalkoff
input[请输入n:
]ton
t=1
s=1
fori=2ton
t=t*2
s=s+t
endfor
v=s/1.42e8
h=(9/3.14159*v)^(1/3)
?
"总麦粒数约为:
"+str(s,10,3)+"粒."
?
"折合体积约为:
"+ltrim(str(v,15))+"立方米"
?
"堆成正圆锥高约为:
"+str(h,5)+"米"
return
程序运行结果与说明
请输入n:
64
总麦粒数约为:
1.845e+019
折合体积约为129906648406立方米
堆成正圆维高约为7193米
5-1失算的另一名题:
买马灯
input"请输入n:
"ton
t=1
s=1
fori=2ton
t=t*2
s=s+t
endfor
?
"共需花费"+ltrim(str(s,16))+"个包卢斯卡."
?
"合约"+str(s/400,10,4)+"卢卡."
return
程序运行结果与点评
请输入n:
24
共需花费1677215个外包卢斯卡
合约41943.0375卢布
6分数不等式
?
"求n<1+1/2+1/3+1/4+...+1/m settalkoff setdecito14 input"请输入n: "ton i=0 s=0 dowhiles i=i+1 s=s+1/i enddo c=i dowhiles i=i+1 s=s+1/i enddo d=i-1 ? "满足不等式的m为: "+ltrim(str(c,10))+" return 程序运行结果: 求n<1+1/2+1/3+1/4….+1/m 请输入n: 10 满足不等式的m为: 12367 请输入n: 15 满足不等式的m为: 1835421 7阶乘与阶乘和数 settalkoff ? "三位阶乘和数有: " form=100to999 a=int(m/100) b=mod(int(m/10),10) c=mod(m,10) ifm=jc(a)+jc(b)+jc(c) ? ? m endif endfor return funcjc parax p=1 fori=1tox p=p*i endfor returnp 程序运行结果: 三位阶乘和数有: 145 可见145是唯一的三位阶乘和数 8综合高精度计算 clear dimea(500) a=0 ? "1: 计算阶乘n! " ? "2: 计算乘方m^n" ? "3: 计算排列数A(n,m)" input"选择(1-3): "toz input"请输入正整数n: "ton ifz#1 input" 请输入正整数m(m<=n): "tom endif d=500 t=1 ifz=3 t=n-m+1 endif a (1)=1 fori=tton ifz=2 b=m else b=i endif f=0 forj=1tod x=a(j)*b+f f=int(x/10) a(j)=x%10 endfor endfor j=d dowhilea(j)=0 j=j-1 enddo f=j docase casez=1 ? str(n,8)+"! =" casez=2 ? str(m,6)+"^"+ltrim(str(n))+"=" casez=3 ? "A("+ltrim(str(n))+","+ltrim(str(m))+")=" endcase d=0 forj=fto1step-1 d=d+1 ? ? str(a(j),1) ifd%50=0 ? space(10) endif endfor ? " 所得结果共"+ltrim(str(f))+"位" return 运行程序,选择3,输入n=100,m=90,得 A(100,90)=257182031095525112107857249934597388918419224714455526533820998388496472644482792132224051962512451185663850094630284343341744128000000000000000000000000 所得结果共152位。 10最大公约数与最小公倍数 set talkoff input"输入正整数a: "toa input"输入整数b: "tob st=ltrim(str(a,12))+","+ltrim(str(b,12)) m=a*b r=mod(a,b) dowhiler#0 a=b b=r r=mod(a,b) enddo ? "("+st+")="+ltrim(str(b,15)) ? "("+st+")="+ltrim(str(m/b)) return 运行程序,输入1104,1272得 (1104,1272)=24 {1104,1272}=58512 11水仙花数 set talkoff input"输入正整数a: "toa input"输入整数b: "tob st=ltrim(str(a,12))+","+ltrim(str(b,12)) m=a*b r=mod(a,b) dowhiler#0 a=b b=r r=mod(a,b) enddo ? "("+st+")="+ltrim(str(b,15)) ? "("+st+")="+ltrim(str(m/b)) return 运行程序,得水仙花数: 153 370 371 407 12勾股数 settalkoff input"请输入区间下限值: "tom1 inpu"请输入区间上限值: "tom2 ? "区间["+ltrim(str(m1))+","+ltrim(str(m2))+"]中的勾股数组有: " n=0 fora=2tosqrt(m2) forb=1toa-1 if(a+b)%2=0 b=b+1 endif t=0 fork=2tob ifb%k=0anda%k=0 t=1 endif endfor ift=0 d=a*a-b*b e=2*a*b f=a*a+b*b fori=1tom2/f x=i*d y=i*e z=i*f ifx loop endif ? str(x)+str(y)+str(z) n=n+1 endfor endif endfor endfor ? "共"+ltrim(str(n))+"组勾股数." return 运行程序,求得[10,30]中的勾股数: 区间(10,30)中的勾股数组有: 12 16 20 15 20 25 18 24 30 10 24 26 21 20 29 13完全数 settalkoff input[ x=]tox input[ y=]toy ? "区间["+ltrim(str(x))+","+ltrim(str(y))+"]中的完全数: " n=0 fora=xtoy s=1 fork=2toa/2 ifa%k=0 s=s+k endif endfor ifs=a n=n+1 ? str(n,3)+": "+ltrim(str(a))+"-1" fork=2toa/2 ifa/k=int(a/k) ? ? "+"+ltrim(str(k,5)) endif endfor endif endfor return 运行程序,输入X=2,Y=100,得 区间[2,1000]中的完全数: 1: 6=1+2+3 2: 28=1+2+4+7+14 3: 496=1+2=4+8+16+31+62+124+248 14相亲数 settalkoff fori=11to9999 s=1 t=int(sqrt(i)+.01) forj=2tot ifi%j=0 s=s+j+i/j endif endfor ifi=t*t s=s-t endif ifi s1=1 t=int(sqrt(s)+0.1) forj=2tot ifs%j=0 s1=s1+j+s/j endif endfor ifs=t*t s1=s1-t endif ifs1=i ? "相亲数: "+str(i)+str(s) ? str(i,5)+"的真因数之和为: 1" forj=2toi/2 ifi%j=0 ? ? "+"+ltrim(str(j)) endif endfor ? ? "="+ltrim(str(s)) ? str(s,5)+"的真因数之和为: 1" forj=2tos/2 ifs%j=0 ? ? "+"+ltrim(str(j)) endif endfor ? ? "="+ltrim(str(i)) endif endif endfor return 运行程序,得4位以内的相亲数: 相亲数: 220 284 220的真因数之和为: 1+2+4+5+10+11+20+22+44+55+110=284 284的真因数之和为: 1+2+4+71+142=220 相亲数 1184 1210 1184的真因数之和为: 1+2+4+8+16+32+37+74+148+296+592=1210 1210的真因数之和为: 1+2+5+10+11+22+55+110+121+242+605=1184 相亲数 2620 2924 2620的真因数之和为: 1+2+4+5+10+20+131+262+524+655+1310=2924 2924的真因数之和为: 1+2+4+17+34+43+68+86+172+731+1462=2620 相亲数 5020 5564 5020的真因数之和为: 1+2+4+5+10+20+251+502+1004+1255+2510 =5564 5564的真因数之和为: 1+2+4+13+26+52+107+214+428+1391+2782 =5020 相亲数 6232 6368 6232的真因数之和为: 1+2+4+8+19+38+41+76+82+152+164+328+779 +1558+3116=6368 6368的真因数之和为: 1+2+4+8+16+32+199+398+796+1592+3184 =6232 15守形数 settalkoff input[x=]tox input[y=]toy fora=xtoy s=a*a b=1 k=a dowhilek>0 b=b*10 k=int(k/10) enddo c=s%b ifa=c ? ltrim(str(a))+[^2=]+ltrim(str(s)) endif endfor return 运行程序,输入X=10,Y=10000得 25^2=625 76^2=5776 376^2=141376 625^2=390625 9376^2=87909376 16素数 settalkoff ? "本程序求区间[c,d]上的素数: " input"输入区间下限c: "toc input"输入区间上限d: "tod ? "区间["+ltrim(str(c))+","+ltrim(str(d))+"]上的素数有: " n=0 ifc%2=0 c=c+1 endif ? "" fori=ctodstep2 t=0 forj=3tosqrt(i)step2 ifi%j=0 t=1 exit endif endfor ift=0 ? ? str(i,6) n=n+1 ifmod(n,10)=0 ? "" endif endif endfor ? "共"+ltrim(str(n))+"个素数." return 程序运行示例 本程序求区间[C,D]上的数数 输入区间下限C: 2000 输入区间上限D: 2100 2003201120172027202920392053206320692081 2083208720892099 共14个素数 17乌兰现象 settalkoff clear input"请输入数阵的阶数m: "tom dimex((m+1)*(m+1)),y((m+1)*(m+1)) x (1)=0 y (1)=0 n=1 t=int(m/2) fori=1tot n=n+1 x(n)=x(n-1)+1 y(n)=y(n-1) dowhiley(n) n=n+1 x(n)=x(n-1) y(n)=y(n-1)+1 enddo dowhilex(n)>-i n=n+1 x(n)=x(n-1)-1 y(n)=y(n-1) enddo dowhiley(n)>-i n=n+1 x(n)=x(n-1) y(n)=y(n-1)-1 enddo dowhilex(n) n=n+1 x(n)=x(n-1)+1 y(n)=y(n-1) enddo endfor ? str(m,2)+"阶数字方螺线为: " fork=1tom*m r=0 forj=2tosqrt(k) ifk%j=0 r=1 exit endif endfor ifr=0andk#1 @25-y(k)*2,80+x(k)*5saystr(k,3) color GR+/R else @25-y(k)*2,80+x(k)*5saystr(k,3) endif waitwindtime0.1 endfor return 运行程序,输入M=10,得10阶数字方螺线如下图: 100999897969594939291 65646362616059585790 66373635343332315689 67381716151413305588 683918 5 4 312295487 694019 6 1 211285386 704120 7 8 910275285 71422122232425265184 72434445464748495083 73747576777879808182 乌兰现象再现 18孪生素数 settalkoff ? "求区间[c,d]上的孪生素数对" input"请输入c(c>2): "toc input"请输入d: "tod f=0 n=0 ifc%2=0 c=c+1 endif fori=ctodstep2 t=0 forj=3tosqrt(i)step2 ifi%j=0 t=1 exit endif endfor ift=0 ifi-f=2 ? ? "("+ltrim(str(f))+","+ltrim(str(i))+")" n=n+1 endif f=i endif endfor ? "共"+ltrim(str(n))+"对孪生素数." return 运行程序,输入区间[101,200],得 (101,103),(107,109),(137,139),(149,151),(179,181) (191,193),(197,199) 共7对孪生素数 19梅森尼数 settalkoff clear s=0 t=2 forn=2to50 t=t*2 m=t-1 x=0 forj=3tosqrt(m)+1step2 ifm%j=0 x=1 exit endif endfor ifx=0 s=s+1 ? "2^"+ltrim(str(n))+"-1="+ltrim(str(m)) endif endfor ? "指数n于[2,50]中梅森尼数共有"+ltrim(str(s))+"个." return 程序运行结果与讨论 2^2-1=3 2^3-1=7 2^5-1=31 2^7-1=127 2^13-1=8191 2^17-1=131071 2^19-1=524287 2^31-1=2147483647 指数n于[2,50]中的梅森尼数共有8个 20金蝉素数 dimea(5) ? "金蝉素数为: " fork=10001to99999step2 t=0 forj=3tosqrt(k)step2 ifk%j=0 t=1 exit endif endfor ift=0 a (1)=k%10 a(5)=int(k/10000) d=int(k/10)%1000 forj=2tosqrt(d) ifd%j=0 t=1 exit endif endfor endif ift=0 a (2)=d%10 a(4)=int(d/100) a(3)=int(d/10)%10 fori=1to4 forj=i+1to5 ifa(i)=a(j) t=1 exit endif endfor endfor endif ift=0 forj=1to5 ifa(j)%2=0ora(3)=1ora(3)=9 t=1 exit endif endfor endif ift=0 ? ? k endif endfor return 程序运行,得5个金蝉素数: 1359753791795319157395713 在输出的这5个金蝉素数中,13597与79531是互逆的金蝉素数。 21素数多项式 settalkoff m=0 input"请输入f: "tof ? "y=x^2-x+"+str(f,2)+"," ? ? "当x取值在[1,"+str(f-1,2)+"],y的素数分布: " ? "" forx=1tof-1 y=x*x-x+f t=0 fork=3tosqrt(y)step2 ify%k=0 t=1 exit endif endfor ift=0 ? ? "x="+str(x,2)+"时,"+str(y,4)+"素数: " m=m+1 ifm%4=0 ? "" endif else ? ? "x="+str(x,2)+"时,"+str(y,4) ? ? "="+str(k,3)+"*"+str(y/k.3) endif endfor return 请输入f: 41 y=x^2+41 ,当n取值在[1,40],y的素数分布: x=1时,41素数,x=2时,43素数,x=3时,47素数, x=4时,53素数,x=5时,61素数,x=6时,71素数, x=7时,83素数,x=8时,97素数,x=9时,113素数, x=10时,131素数,x=11时,151素数,x=12时,173素数, x=13时,197素数,x=14时,223素数,x=15时,251素数, x=16时,281素数,x=17时,313素数,x=18时,347素数, x=19时,383素数,x=20时,421素数,x=21时,461素数, x=22时,503素数,x=23时,547素数,x=24时,593素数, x=25时,641素数,x=26时,691素数,x=27时,743素数, x=28时,797素数,x=29时,853素数,x=30时,911素数, x=31时,971素数,x=32时,1033素数,x=33时,1097素数, x=34时,1163素数,x=35时,1231素数,x=36时,1301素数, x=37时,1373素数,x=38时,1447素数,x=39时,1523素数, x=40时,1601素数, 验证了当x=1,2,,,,40时,二次多项式x^2-x+41的值均为素数 22等差素数列 ? "求指定区间内等差素数列的最多项数: " input"请输入区间下限w0: "tow0 input"请输入区间上限w: "tow dimea((w-w0)/2) u=0 ifw0%2=0 w0=w0+1 endif fork=w0towstep2 t=0 forj=3tosqrt(k)step2 ifk%j=0 t=1 exit endif endfor ift=0 u=u+1 a(u)=k endif endfor max=0 forn=1tou-1 p=a(u)-a(n) forj=n+1tou d=a(j)-a(n) ifd>p/3 exit endif h=j m1=2 fori=j+1tou ifa(i)-a(h)=d h=i m1=m1+1 endif ifmax max=m1 m=a(n) d1=d endif endfor endfor endfor ? "区间["+ltrim(str(w0))+","+ltrim(str(w))+"]" ? ? "内等差素数列最多有"+ltrim(str(max))+"项>" ? "" fori=1tomax ? ? ltrim(str(m+(i-1)*d1))+"" endfor return 程序运行示例: 请输入区间下限w0: 3 请输入区限上限w: 2009 区间[3,2009]内等差素数列最多有9项: 199 409 619 829 1039 1249 1459 1669 1879 请输入区间下限w0: 101 请输入区限上限w: 1000 区间[3,2009]内等差素数列最多有6项: 107 137 167 197 227 257 23验证歌德巴赫想 settalkoff ? "在区间[c,d]中验证哥德巴赫猜想: " input"请输入区间下限c="toc input"请输入区间上限d="tod ifc%2#0 c=c+1 endif fori=ctodstep2 j=1 dowhilej<=i/2 j=j+2 k=i-j t=0 forx=3tosqrt(k)step2 if(j*k)%x=0 t=1 exit endif endfor ift=0 ? ""+ltrim(str(i))+"="+ltr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VFP 趣味 程序设计
![提示](https://static.bdocx.com/images/bang_tan.gif)