vb经典算法Word文件下载.doc
《vb经典算法Word文件下载.doc》由会员分享,可在线阅读,更多相关《vb经典算法Word文件下载.doc(5页珍藏版)》请在冰豆网上搜索。
例如:
1^3+5^3+3^3=153,所以153为水仙花数。
要解答这样的题目其实就是要掌握从一个整数中分离出其各位数码的方法,或者由各位数码求得该数的方法,因此此类题目一般有两种解法,本例分别使用了两种解法,具体程序参考"
帮助"
中的"
查看源程序"
。
从整数中分离各位数码的方法(设n为一个四位数):
求千位:
a=n\1000
求百位:
b=n\100mod10
求十位:
c=n\10mod10
求个位:
d=nmod10
由各位数码合成该数的方法(设千百十个位分别为a,b,c,d):
n=a*1000+b*100+c*10+d
10、11、12、18、45、61、62、63、64、76、77、80等。
⒊编程要求:
求100-900之间的所有回文数的个数。
所谓回文数是从左至右与从右至左读起来都是一样的数字,如:
121是一个回文数。
虽然与水仙花数的定义不同,但是求解方法却十分类似,本题使用数位分离法。
168、169、170、173、185等。
⒋编程要求:
统计1000-9999之间的所有满足以下条件的四位数的个数。
该数是一个完全平方数,且其第1位与第3位数字之和为10,第2位与第4位数字之积为12。
本题选自题库230题。
一个整数是另一个整数的平方,就称称该数是完全平方数,例如:
25=5^2,所以25是完全平方数。
换言之,如果一个数的平方根是整数,那么这个数就是完全平方数。
表达完全平方数的条件写法:
sqr(i)=int(sqr(i))
230、232、250、258、260等。
⒌编程:
求出200到500之间所有的完数之和。
本题选自题库139题
一个数如果刚好与它所有的因子之和相等,则称该数为一个完数。
所谓因子,就是能将该数整除的数,比如6的因子有1,2,3,而6=1+2+3,所以6是一个完数。
解决该类问题的关键是求一个数的所有因子,假设有一数为n,循环用从1-n/2的数去除n,如果能将n整除,则该数为n的因子。
算法如下:
s1=0
fori=1ton/2
ifnmodi=0thens1=s1+i'
求因子之和
nexti
139、141、143、145、147、202、213、214等。
⒍编程:
求10到200间的所有素数例4-22P95
素数就是数学当中的质数,判断一个数是不是素数,就是用除了1和它自己以外所有的数去除该数,如果都不能将其整除则该数为素数。
求n是不是素数,就是循环用2-n/2的整数去除n,如果这之间有一个数能将n整除,那么可以确定该数不是素数,用exitfor强制退出循环,如果在整个过程中都没有数能将其整除,则该数是个素数,这时i>
n/2。
fori=2ton/2
ifnmodi=0thenexitfor
nexti
ifi>
n/2thenprint"
该数是一个素数!
"
16、39、40、90等。
⒎编程:
求m和n的最大公约数与最小公倍数。
最大公约数和最小公倍数是大家熟悉的数学问题,在这里分别使用了辗转相除法和穷举法两种算法,源程序请查看"
,辗转相除法的具体说明见课本93页,例4-20。
穷举法思路:
假设m大于n,那么m和n的最大公约数不可能大于n,所以循环用从n~1的整数却除m和n,如果能同时将m和n整数,那么该数就是m和n的最大公约数。
fori=nto1step-1
ifmmodi=0andnmodi=0thenexitfor
nexti
'
此时的i就是最大公约数。
69、70、71、72、74、84等。
⒏编程:
一个数列的第1项为1,第2项为1,从第3项开始,每一项均为前两项之各,求该数列前20项的和。
裴波那契数问题其实是一种递推问题,由一个数列的前几项求出该数列的后一项。
28、231、233、235、237、239、241、243、245、247等。
⒐编程:
计算前n个自然数小于1000的最大和。
例4-21
求某个数列中符合条件的数的和或者个数。
该种题型的题目很多可以使用计算器或者Excel来求解。
这种题目,由于循环次数未知,因此一般通过do…loop循环来实现,用while或者until来表达终止条件。
1、2、5、6、7、8、13、19、21、22、23、24、25、26、27、29、30、31、33、35、36、37、38等。
PublicSubbqbj()
'
百钱百鸡
DimxAsInteger,yAsInteger,zAsInteger,nAsInteger
n=0
Forx=0To20
Fory=0To33
z=100-x-y
Ifx*5+y*3+z/3=100Thenn=n+1
Nexty
Nextx
MsgBox"
有"
&
n&
"
种买法。
vbOKOnly,"
百钱百鸡问题"
EndSub
publicsubshuixiang1()
'
水仙花数,从整数分离出各位数码的方法
dimiasinteger,
fori=2to9999'
0和1不是水仙花数
a=i\1000'
求千位
b=i\100mod10'
求百位
c=i\10mod10'
求个位
d=imod10
ifa^3+b^3+c^3+d^3=ithenprinti:
n=n+1
printn
endsub
PublicSubshuixiang2()
水仙花数,已知各位数码求整数的方法
DimqAsInteger,bAsInteger,sAsInteger,gAsInteger
DimstrAsString,nAsInteger
Forq=0To9
Forb=0To9
Fors=0To9
Forg=0To9
n=q*1000+b*100+s*10+g
Ifq^3+b^3+s^3+g^3=nThenstr=str&
Space(5)
Nextg
Nexts
Nextb
Nextq
四位数以内的水仙花数有:
str
PublicSubhws()
回文数,已知整数分离出各位数码的方法
DimiAsInteger,aAsInteger,bAsInteger,cAsInteger,nAsInteger
Fori=100To900
a=i\100
b=i\10Mod10
c=iMod10
Ifa=cThenn=n+1
Nexti
100至900之间共有回文数"
i&
个"
回文数"
PublicSubwqpfs()
完全平方数
DimiAsInteger,nAsInteger
DimaAsInteger,bAsInteger,cAsInteger,dAsInteger
Fori=1000To9999'
1234
a=i\1000
b=i\100Mod10
c=i\10Mod10
d=iMod10
IfInt(Sqr(i))=Sqr(i)Anda+c=10Andb*d=12Thenn=n+1
1000到9999之间满足条件的数共有"
完全平方数"
PublicSubws()
完数
DimsAsInteger,s1AsInteger,iAsInteger,jAsInteger
s=0
Fori=200To500
s1=0
Forj=1Toi/2
IfiModj=0Thens1=s1+j
Nextj
Ifs1=iThens=s+i
200与500之间的完数之和为"
s,vbOKOnly,"
完数"
PublicSubss()
素数
DimnAsInteger,iAsInteger,jAsInteger
Fori=10To200
Forj=2Toi/2
IfiModj=0ThenExitFor
Ifj>
i/2Then
n=n+1
EndIf
10到200