趣味VisualFoxPro程序设计集锦.docx
- 文档编号:9439311
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:67
- 大小:26.05KB
趣味VisualFoxPro程序设计集锦.docx
《趣味VisualFoxPro程序设计集锦.docx》由会员分享,可在线阅读,更多相关《趣味VisualFoxPro程序设计集锦.docx(67页珍藏版)》请在冰豆网上搜索。
趣味VisualFoxPro程序设计集锦
-
趣味VisualFoxPro程序设计集锦
5.舍罕王的失算
settalkoff
input[请输入n:
]ton
|
t=1
s=1
fori=2ton
t=t*2
"
s=s+t
endfor
v=s/
h=(9/*v)^(1/3)
、
"总麦粒数约为:
"+str(s,10,3)+"粒."
"折合体积约为:
"+ltrim(str(v,15))+"立方米"
"堆成正圆锥高约为:
"+str(h,5)+"米"
return
]
程序运行结果与说明
请输入n:
64
总麦粒数约为:
+019
折合体积约为立方米
^
堆成正圆维高约为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个外包卢斯卡
合约卢布
、
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)=0000000000000000000 所得结果共152位。 " 10最大公约数与最小公倍数 settalkoff 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水仙花数 settalkoff . 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 运行程序,得水仙花数: 153370371407 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)中的勾股数组有: 121620 152025 182430 ~ 102426 212029 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)+ 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位以内的相亲数: ( 相亲数: 220284 220的真因数之和为: 1+2+4+5+10+11+20+22+44+55+110=284 284的真因数之和为: 1+2+4+71+142=220 相亲数11841210 $ 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 相亲数26202924 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 相亲数50205564 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 相亲数62326368 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= 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)colorGR+/R ! else @25-y(k)*2,80+x(k)*5saystr(k,3) endif waitwindtime ; endfor return 运行程序,输入M=10,得10阶数字方螺线如下图: 100999897969594939291 - 65646362616059585790 66373635343332315689 67381716151413305588 68391854312295487 ! 69401961211285386 70412078910275285 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=47 指数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/ 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项: 19940961982910391249145916691879 请输入区间下限w0: 101 } 请输入区限上限w: 1000 区间[3,2009]内等差素数列最多有6项: 107137167197227257 23验证歌德巴赫想 @ settalkoff "在区间[c,d]中验证哥德巴赫猜想: " input"请输入区间下限c="toc input"请输入区间上限d="tod ( ifc%2#0 c=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 趣味 VisualFoxPro 程序设计 集锦