vb经典算法.doc
- 文档编号:232222
- 上传时间:2022-10-07
- 格式:DOC
- 页数:5
- 大小:35KB
vb经典算法.doc
《vb经典算法.doc》由会员分享,可在线阅读,更多相关《vb经典算法.doc(5页珍藏版)》请在冰豆网上搜索。
努力就有收获,人人都能成功!
一·经典算法
⒈编程要求:
公鸡每只5元,母鸡每只3元,小鸡3只1元,请问用100元钱买100只鸡,共有多少种买法?
说明:
百钱百鸡问题其实就是排列组合的问题,解答这种问题需根据题意先确实变量的取值范围,然后使用穷举法求解,一般使用For…Next的循环嵌套结构。
求解本题:
先设可买公鸡x只,母鸡y只,小鸡z只。
取值范围为:
x(0-20),y(0-33),z(0-100)
条件为:
x+y+z=100x*5+y*3+z/3=100
使用多重For…Next循环产生排列组合,再利用if…then单分支语句对每个组合进行判断,即可找到符合条件的买法。
程序中的变量n是计数器。
题库相关试题:
14、15、42、44、56、89、98等。
⒉编程要求:
求四位数以内的水仙花数的个数。
说明:
如果某数的各位数码的立方之和等于这个数,那么就称该数为水仙花数。
例如:
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
nexti
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&n&Space(5)
Nextg
Nexts
Nextb
Nextq
MsgBox"四位数以内的水仙花数有:
"&str
EndSub
PublicSubhws()
'回文数,已知整数分离出各位数码的方法
DimiAsInteger,aAsInteger,bAsInteger,cAsInteger,nAsInteger
n=0
Fori=100To900
a=i\100
b=i\10Mod10
c=iMod10
Ifa=cThenn=n+1
Nexti
MsgBox"100至900之间共有回文数"&i&"个",vbOKOnly,"回文数"
EndSub
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
Nexti
MsgBox"1000到9999之间满足条件的数共有"&n&"个",vbOKOnly,"完全平方数"
EndSub
PublicSubws()
'完数
DimsAsInteger,s1AsInteger,iAsInteger,jAsInteger
s=0
Fori=200To500
s1=0
Forj=1Toi/2
IfiModj=0Thens1=s1+j
Nextj
Ifs1=iThens=s+i
Nexti
MsgBox"200与500之间的完数之和为"&s,vbOKOnly,"完数"
EndSub
PublicSubss()
'素数
DimnAsInteger,iAsInteger,jAsInteger
n=0
Fori=10To200
Forj=2Toi/2
IfiModj=0ThenExitFor
Nextj
Ifj>i/2Then
n=n+1
EndIf
Nexti
MsgBox"10到200
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vb 经典 算法