大学VB程序方案常用算法Word文档下载推荐.docx
- 文档编号:5746159
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:14
- 大小:25.13KB
大学VB程序方案常用算法Word文档下载推荐.docx
《大学VB程序方案常用算法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《大学VB程序方案常用算法Word文档下载推荐.docx(14页珍藏版)》请在冰点文库上搜索。
Mod10'
求个位上的数字
Ifp=0Thenp=10
x(p>
=x(p>
+1
Form1.Print"
统计结果"
Fori=1To10
p=i
Ifi=10Thenp=0
个位数为"
+Str(p>
+"
共"
+Str(x(i>
>
个"
EndSub
二、求两个整数的最大公约数、最小公倍数
分析:
求最大公约数的算法思想:
(最小公倍数=两个整数之积/最大公约数>
(1>
对于已知两数m,n,使得m>
n;
(2>
m除以n得余数r;
(3>
若r=0,则n为求得的最大公约数,算法结束;
否则执行(4>
;
(4>
m←n,n←r,再重复执行(2>
例如:
求m=14,n=6的最大公约数.mnr
1462
620
m=inputBox("
m="
n=inputBox("
n="
nm=n*m
Ifm<
nThent=m:
m=n:
n=t
r=mmodn
DoWhile(r<
0>
m=n
n=r
r=mmodn
Loop
Print"
最大公约数="
n
Print"
最小公倍数="
nm/n
三、判断素数
只能被1或本身整除的数称为素数基本思想:
把m作为被除数,将2—INT<
)作为除数,如果都除不尽,m就是素数,否则就不是。
<
可用以下程序段实现)
m=val(InputBox("
请输入一个数"
Fori=2Toint(sqr(m>
IfmModi=0ThenExitFor
Ifi>
int(sqr(m>
Then
该数是素数"
该数不是素数"
将其写成一函数,若为素数返回True,不是则返回False
PrivateFunctionPrime(masInteger>
AsBoolean
Dimi%
Prime=True
IfmModi=0ThenPrime=False:
ExitFor
EndFunction
四、排序问题
1.选择法排序<
升序)
基本思想:
1)对有n个数的序列<
存放在数组a(n>
中),从中选出最小的数,与第1个数交换位置;
2)除第1个数外,其余n-1个数中选最小的数,与第2个数交换位置;
3)依次类推,选择了n-1次后,这个数列已按升序排列。
程序代码如下:
Fori=1Ton-1
imin=i
Forj=i+1Ton
Ifa(imin>
>
a(j>
Thenimin=j
Nextj
t=a(i>
=a(imin>
a(imin>
=t
NextI
五、查找问题
1.①顺序查找法<
在一列数中查找某数x)
一列数放在数组a(1>
---a(n>
中,待查找的数放在x中,把x与a数组中的元素从头到尾一一进行比较查找。
用变量p表示a数组元素下标,p初值为1,使x与a(p>
比较,如果x不等于a(p>
,则使p=p+1,不断重复这个过程;
一旦x等于a(p>
则退出循环;
另外,如果p大于数组长度,循环也应该停止。
这个过程可由下语句实现)
p=1
DoWhilex<
a(p>
Andp<
=n
p=p+1
下面写一查找函数Find,若找到则返回下标值,找不到返回0
OptionBase1
PrivateFunctionFind(a(>
AsSingle,xAsSingle>
Dimn%,p%
n=Ubound(a>
DoWhilex<
Ifp>
nthenp=0
Find=p
EndFunction
②基本思想:
中,待查找的关键值为key,把key与a数组中的元素从头到尾一一进行比较查找,若相同,查找成功,若找不到,则查找失败。
(查找子过程如下。
index:
存放找到元素的下标。
PublicSubSearch(a(>
AsVariant,keyAsVariant,index%>
Dimi%
Fori=LBound(a>
ToUBound(a>
Ifkey=a(i>
index=i
ExitSub
index=-1
2.折半查找法<
只能对有序数列进行查找)
设n个有序数<
从小到大)存放在数组a(1>
----a(n>
中,要查找的数为x。
用变量bot、top、mid分别表示查找数据范围的底部<
数组下界)、顶部<
数组的上界)和中间,mid=(top+bot>
/2,折半查找的算法如下:
1)x=a(mid>
,则已找到退出循环,否则进行下面的判断;
2)x<
a(mid>
,x必定落在bot和mid-1的范围之内,即top=mid-1;
3)x>
,x必定落在mid+1和top的范围之内,即bot=mid+1;
4)在确定了新的查找范围后,重复进行以上比较,直到找到或者bot<
=top。
将上面的算法写成如下函数,若找到则返回该数所在的下标值,没找到则返回-1。
Functionsearch(a(>
AsInteger,xAsInteger>
Dimbot%,top%,mid%
DimfindAsBoolean'
代表是否找到
bot=LBound(a>
top=UBound(a>
find=False'
判断是否找到的逻辑变量,初值为False
DoWhilebot<
=topAndNotfind
mid=(top+bot>
\2
Ifx=a(mid>
find=True
ExitDo
ElseIfx<
a(mid>
top=mid-1
bot=mid+1
IffindThen
search=mid
search=-1
EndFunction
六、插入法
把一个数插到有序数列中,插入后数列仍然有序
n个有序数<
—a(n>
中,要插入的数x。
首先确定x插在数组中的位置P;
可由以下语句实现)
p=1
dowhilex>
a(p>
andp<
=n
p=p+1
loop
元素向后顺移一个位置以空出a(p>
元素放入x,可由以下语句实现:
fori=ntopstep-1
a(i+1>
=a(i>
nexti
=x
将其写成一插入函数
PrivateSubInstert(a(>
AsSingle,xAsSingle>
Dimp%,n%,i%
n=UBound(a>
ReDimPreservea(n+1>
p=0
DoWhilex>
=n'
确定x应插入的位置
Fori=nTopStep-1
a(i+1>
=a(i>
=x
EndSub
七、矩阵<
二维数组)运算
1)矩阵的加、减运算
C(i,j>
=a(i,j>
+b(i,j>
加法
-b(i,j>
减法
2)矩阵相乘
矩阵A有M*L个元素,矩阵B有L*N个元素,则矩阵C=A*B有M*N个元素)。
矩阵C中任一元素
(i=1,2,…,m。
j=1,2,…,n>
Fori=0Tom
Forj=0Ton
c(i,j>
=0
Fork=0Tol
=c(i,j>
+a(i,k>
*b(k,j>
Nextk
Nexti
3)矩阵传置
例:
有二维数组a(5,5>
,要对它实现转置,可用下面两种方式:
Fori=1to5(2>
Fori=2to5
Forj=i+1to5Forj=1toi
t=a(i,j>
t=a(i,j>
a(i,j>
=a(j,i>
a(i,j>
a(j,i>
=ta(j,i>
=t
NextjNextj
NextiNexti
4)求二维数组中最小元素及其所在的行和列
基本思路同一维数组,可用下面程序段实现<
以二维数组a(2,3>
为例):
‘变量max中存放最大值,row,column存放最大值所在行列号
Max=a(1,1>
:
row=1:
Column=1
Fori=1To2
Forj=1To3
Ifa(i,j>
a(row,Column>
Max=a(i,j>
row=i
Column=j
最大元素是"
Max
在第"
&
row&
"
行,"
第"
Column&
列"
八、数制转换
将一个十进制整数m转换成→r(2-16>
进制字符串。
方法:
将m不断除r取余数,直到商为零,以反序得到结果。
下面写出一转换函数,参数idec为十进制数,ibase为要转换成数的基<
如二进制的基是2,八进制的基是8等),函数输出结果是字符串。
PrivateFunctionTrDec(idecAsInteger,ibaseAsInteger>
AsString
DimstrDecR$,iDecR%
strDecR="
"
DoWhileidec<
0
iDecR=idecModibase
IfiDecR>
=10Then
strDecR=Chr$(65+iDecR-10>
strDecR
strDecR=iDecR&
idec=idec\ibase
TrDec=strDecR
九、字符串的一般处理
1.简单加密和解密
加密的思想是:
将每个字母C加<
或减)一序数K,即用它后的第K个字母代替,变换式公式:
c=chr(Asc(c>
+k>
例如序数k为5,这时"
A"
→"
F"
,"
a"
f"
,"
B"
G"
…
当加序数后的字母超过"
Z"
或"
z"
则c=Chr(Asc(c>
+k-26>
例如:
Youaregood→Dtzfwjltti
解密为加密的逆过程
将每个字母C减<
或加)一序数K,即c=chr(Asc(c>
-k>
→"
U"
u"
Y"
T"
当加序数后的字母小于"
-k+26>
下段程序是加密处理:
i=1:
strp="
nL=Len(RTrim(strI>
DoWhile(i<
=nL>
strT=Mid$(strI,i,1>
取第i个字符
If(strT>
="
AndstrT<
iA=Asc(strT>
+5
IfiA>
Asc("
TheniA=iA-26
strp=strp+Chr$(iA>
ElseIf(strT>
strp=strp+strT
i=i+1
Printstrp
2.统计文本单词的个数
算法思路:
1)从文本<
字符串)的左边开始,取出一个字符;
设逻辑量WT表示所取字符是否是单词内的字符,初值设为False
2)若所取字符不是“空格”,“逗号”,“分号”或“感叹号”等单词的分隔符,再判断WT是否为True,若WT不为True则表是新单词的开始,让单词数Nw=Nw+1,让WT=True。
3)若所取字符是“空格”,“逗号”,“分号”或“感叹号”等单词的分隔符,则表示字符不是单词内字符,让WT=False。
(4)再依次取下一个字符,重得<
2)(3>
直到文本结束。
下面程序段是字符串strI中包含的单词数
Nw=0:
Wt=False
Fori=1TonL
SelectCasestrT
Case"
"
"
!
CaseElse
IfNotWtThen
Nw=Nw+1
Wt=True
EndSelect
单词数为:
Nw
十、穷举法
穷举法<
又称“枚举法”)的基本思想是:
一一列举各种可能的情况,并判断哪一种可能是符合要求的解,这是一种“在没有其它办法的情况的方法”,是一种最“笨”的方法,然而对一些无法用解读法求解的问题往往能奏效,通常采用循环来处理穷举问题。
将一张面值为100元的人民币等值换成100张5元、1元和0.5元的零钞,要求每种零钞不少于1张,问有哪几种组合?
Dimi%,j%,k%
5元1元0.5元"
Fori=1To20
Forj=1To100-i
k=100-i-j
If5.0*i+1.0*j+0.5*k=100Then
Printi,j,k
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 VB 程序 方案 常用 算法