VB算法总结.docx
- 文档编号:17096929
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:20
- 大小:24.84KB
VB算法总结.docx
《VB算法总结.docx》由会员分享,可在线阅读,更多相关《VB算法总结.docx(20页珍藏版)》请在冰点文库上搜索。
VB算法总结
VB算法总结:
1、最大公约数算法说明
1) 最大公约数:
用辗转相除法求两自然数m、n的最大公约数。
(1) 首先,对于已知两数m、n,比较并使得m〉n;
(2) m除以n得余数r;
(3) 若r=0,则n为求得的最大公约数,算法结束;否则执行步骤(4)
(4) m←nn←r再重复执行
(2)
譬如:
10与5
分析步骤:
m=10n=5
r=mmodn=0
所以n(n=5)为最大公约数
24与9
分析步骤:
m=24n=9
r=mmodn=6
r≠0m=9n=6
r=mmodn=3
r≠0m=6n=3
r=mmodn=0
所以n(n=3)为最大公约数
算法实现
PrivateFunctionGCD(ByValmAsLong,ByValnAsLong)AsLong
DimtempAsLong
Ifm m=n: n=temp DimrAsLong Do r=mModn Ifr=0ThenExitDo m=n n=r Loop GCD=n EndFunction 2) 最小公倍数 m×n÷最大公约数 3) 互质数 最大公约数为1的两个正整数 2、素数算法说明 素数(质数): 就是一个大于等于2的整数,并且只能被1和本身整除,而不能被其他整数整除的数。 判别某数m是否是素数的经典算法是: 对于m,从I=2,3,4,……,m-1依次判别能否被I整除,只要有一个能整除,m就不是素数,否则m是素数。 PrivateFunctionprime(ByValn%)AsBoolean Dimi% prime=true Fori=2Tosqr(n) IfnModI=0Then Prime=false ExitFor endif NextI EndFunction 3、进制转换算法说明 1) 十进制正整数m转换为R(2-16)进制的字符串。 思路: 将m不断除r取余数,直到商为0,将余数反序即得到结果。 算法实现: PrivateFunctionTran(ByValmAsInteger,ByValrAsInteger)AsString DimStrDtoRAsString,nAsInteger DoWhilem<〉o n=mModr m=m\r Ifn〉9Then StrDtoR=Chr(65+n—10)&StrDtoR Else StrDtoR=n&StrDtoR EndIf Loop Tran=StrDtoR EndFunction 2) R(2-16)进制字符串转换为十进制正整数。 思路: R进制数每位数字乘以权值之和即为十进制数. 算法实现: PrivateFunctionTran(ByValsAsString,ByValrAsInteger)Asinteger DimnAsInteger,decAsInteger s=UCase(Trim(s)) Fori%=1ToLen(s) IfMid(s,i,1)〉=”A”Then n=Asc(Mid(s,i,1))-Asc("A")+10 Else n=Val(Mid(s,i,1)) EndIf dec=dec+n*r^(Len(s)—i) Nexti Tran=dec EndFunction 4、排序问题 (1).选择排序法(升序) 基本思想: 1)对有n个数的序列(存放在数组a(n)中),从中选出最小的数,与第1个数交换位置; 2)除第1个数外,其余n-1个数中选最小的数,与第2个数交换位置; 3)依次类推,选择了n—1次后,这个数列已按升序排列. Optionbase1 Subsort(a()asinteger) Dimi%,j%,t%,p%,n% N=ubound(a) Fori=1Ton—1 p=i Forj=i+1Ton Ifa(j)>a(p)Thenp=j Nextj t=a(i) a(i)=a(p) a(p)=t Nexti Endsub 2.冒泡法排序(升序) 基本思想: (将相邻两个数比较,小的调到前头) 1)有n个数(存放在数组a(n)中),第一趟将每相邻两个数比较,小的调到前头,经n-1次两两相邻比较后,最大的数已“沉底",放在最后一个位置,小数上升“浮起”; 2)第二趟对余下的n—1个数(最大的数已“沉底")按上法比较,经n-2次两两相邻比较后得次大的数; 3)依次类推,n个数共进行n-1趟比较,在第j趟中要进行n—j次两两比较。 程序段如下 Subsort(a()asinteger) Dimi%,j%,n%,t% n=ubound(a) Fori=1Ton—1 Forj=1Ton-i Ifa(j)〉a(j+1)Then temp=a(j): a(j)=a(j+1): a(j+1)=temp Endif Nextj Nexti Endsub 5、查找问题 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 Loop 下面写一查找函数Find,若找到则返回下标值,找不到返回0 OptionBase1 PrivateFunctionFind(a()AsSingle,xAsSingle)AsInteger Dimn%,p% n=Ubound(a) p=1 DoWhilex<>a(p)Andp<=n p=p+1 Loop Ifp>nthenp=0 Find=p EndFunction ②基本思想: 一列数放在数组a (1)——-a(n)中,待查找的关键值为key,把key与a数组中的元素从头到尾一一进行比较查找,若相同,查找成功,若找不到,则查找失败.(查找子过程如下.index: 存放找到元素的下标.) PublicSubSearch(a()AsVariant,keyAsVariant,index%) Dimi% Fori=LBound(a)ToUBound(a) Ifkey=a(i)Then index=i ExitSub EndIf Nexti index=-1 EndSub 2.折半查找法(只能对有序数列进行查找) 基本思想: 设n个有序数(从小到大)存放在数组a (1)—-——a(n)中,要查找的数为x。 用变量bot、top、mid分别表示查找数据范围的底部(数组下界)、顶部(数组的上界)和中间,mid=(top+bot)/2,折半查找的算法如下: (1)x=a(mid),则已找到退出循环,否则进行下面的判断;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 算法 总结
![提示](https://static.bingdoc.com/images/bang_tan.gif)