vb经典算法.doc

上传人:wj 文档编号:1220865 上传时间:2023-04-30 格式:DOC 页数:5 大小:35KB
下载 相关 举报
vb经典算法.doc_第1页
第1页 / 共5页
vb经典算法.doc_第2页
第2页 / 共5页
vb经典算法.doc_第3页
第3页 / 共5页
vb经典算法.doc_第4页
第4页 / 共5页
vb经典算法.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

vb经典算法.doc

《vb经典算法.doc》由会员分享,可在线阅读,更多相关《vb经典算法.doc(5页珍藏版)》请在冰点文库上搜索。

vb经典算法.doc

努力就有收获,人人都能成功!

一·经典算法

⒈编程要求:

公鸡每只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间的所有素数共有"&n&"个",vbOKOnly,"素数。

"

EndSub

PublicSubzdgys()

'求最大公约数和最小公倍数,本例使用辗转相除法。

DimmAsInteger,nAsInteger,rAsInteger,tAsInteger

Dimm1AsInteger,n1AsInteger

m=Val(InputBox("请输入第一个整数m"))

n=Val(InputBox("请输入第一个整数n"))

m1=m

n1=n

Ifm

m=n:

m=t

Do

r=mModn

m=n

n=r

LoopUntilr=0

MsgBoxm1&"和"&n1&"的最大公约数是:

"&m&Space(4)&"最小公倍数是:

"&m1*n1/m

EndSub

PrivateSubCommand10_Click()

'求最大公约数和最小公倍数,本例使用穷举法。

DimmAsInteger,nAsInteger,rAsInteger,tAsInteger

Dimm1AsInteger,n1AsInteger

m=Val(InputBox("请输入第一个整数m"))

n=Val(InputBox("请输入第一个整数n"))

m1=m

n1=n

Ifm

m=n:

t=n

Fori=nTo1Step-1

IfmModi=0AndnModi=0Then

ExitFor

EndIf

Next

MsgBoxm1&"和"&n1&"的最大公约数是:

"&i&Space(4)&"最小公倍数是:

"&m1*n1/i

EndSub

PublicSubpeibo()

'裴波那契数

Dimf1AsInteger,f2AsInteger,sAsInteger

s=0

f1=1

f2=1

'Picture1.Printf1,f2

Fori=1To9

f1=f1+f2

f2=f1+f2

'Picture1.Printf1,f2

s=s+f1+f2

Nexti

MsgBox"裴波那契数列的前20项之和为"&s,vbOKOnly,"裴波那契数"

EndSub

PublicSubqhwt()

'求和问题

DimsAsInteger,iAsInteger

s=0

i=0

DoWhiles<1000

i=i+1

s=s+i

Loop

MsgBox"比1000小的最大和为"&s-i'退出循环时的s一定大于1000,因为多加了一次i,所以要将其减去

EndSub

13

二·程序改错技巧

为了帮助大家更好地解答程序改错题,在这里对程序中经常出现的错误进行了总结:

1、循环条件错误;

2、循环变量修改公式错误,即步长错误;

以上两种错误见下例:

程序功能:

求s=1+3+5+7+...直到s>2000为止。

程序中有两行有错误。

改正错误,使它能输出正确的结果。

源程序:

PrivateSubCommand1_Click()

DimIAsInteger,sAsLong

s=0

I=1

DoUntils<2000

s=s+I

I=I+1

Loop

Prints

EndSub

正确程序:

PrivateSubCommand1_Click()

DimIAsInteger,sAsLong

s=0

I=1

DoUntils>2000'循环条件错误

s=s+I

I=I+2'步长错误

Loop

Prints

EndSub

3、循环语句配套错误;

程序功能:

计算s=2!

+4!

+8!

程序中有两行有错误。

改正错误,使它能输出正确的结果。

源程序:

PrivateSubCommand1_Click()

DimkAsInteger,IAsInteger

DimsAsLong,tAsLong

s=0

I=1

DoWhileI<=3

t=1

k=1

Whilek<=2*I

t=t*k

k=k+1

Wend

s=s+t

I=I+1

Wend

Prints

EndSub

正确程序:

PrivateSubCommand1_Click()

DimkAsInteger,IAsInteger

DimsAsLong,tAsLong

s=0

I=1

DoWhileI<=3

t=1

k=1

Whilek<=2^I'循环条件错误。

2的平方

t=t*k

k=k+1

Wend

s=s+t

I=I+1

loop'循环语句配置错误。

Do…Loop,while…wend,for…next

Prints

EndSub

4、选择条件错误:

条件出错或者运算出错,and与or的错误;

程序功能:

求200到400间,能被3整除但不能被7整除的数的个数。

程序中有两行有错误。

改正错误,使它能输出正确的结果。

源程序:

PrivateSubCommand1_Click()

DimcountAsInteger

DimxAsInteger

count=0

x=200

Whilex<=400

IfxMod3=0OrxMod7<>0Then

count=count+1

EndIf

x=x+1

Loop

Printcount

EndSub

正确程序:

PrivateSubCommand1_Click()

DimcountAsInteger

DimxAsInteger

count=0

x=200

Whilex<=400

IfxMod3=0AndxMod7<>0Then'选择条件错误。

or应改为and

count=count+1

EndIf

x=x+1

Wend'循环语句配套错误。

while…wend

Printcount

EndSub

以上例题均选自等级题库的1-5题。

13

5

为了梦想,为了明天,加油!

相信自己一定能行的!

——————凤凰学者

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2