VB算法總結(jié).doc_第1頁(yè)
VB算法總結(jié).doc_第2頁(yè)
VB算法總結(jié).doc_第3頁(yè)
VB算法總結(jié).doc_第4頁(yè)
VB算法總結(jié).doc_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

VB算法總結(jié):1、最大公約數(shù)算法說(shuō)明 1) 最大公約數(shù):用輾轉(zhuǎn)相除法求兩自然數(shù)m、n的最大公約數(shù)。(1) 首先,對(duì)于已知兩數(shù)m、n,比較并使得mn;(2) m除以n得余數(shù)r;(3) 若r0,則n為求得的最大公約數(shù),算法結(jié)束;否則執(zhí)行步驟(4)(4) mn nr 再重復(fù)執(zhí)行(2)譬如:10與5分析步驟:m=10 n=5r=m mod n=0所以n(n=5)為最大公約數(shù)24與9分析步驟:m=24 n=9r=m mod n=6r0 m=9 n=6r=m mod n=3r0 m=6 n=3r=m mod n=0所以n(n=3)為最大公約數(shù)算法實(shí)現(xiàn)Private Function GCD(ByVal m As Long, ByVal n As Long) As Long Dim temp As Long If m n Then temp = m: m = n: n = temp Dim r As Long Do r = m Mod n If r = 0 Then Exit Do m = n n = r Loop GCD = nEnd Function2) 最小公倍數(shù)mn最大公約數(shù)3) 互質(zhì)數(shù)最大公約數(shù)為1的兩個(gè)正整數(shù)2、素?cái)?shù)算法說(shuō)明 素?cái)?shù)(質(zhì)數(shù)):就是一個(gè)大于等于2的整數(shù),并且只能被1和本身整除,而不能被其他整數(shù)整除的數(shù)。 判別某數(shù)m是否是素?cái)?shù)的經(jīng)典算法是: 對(duì)于m,從I2,3,4,m1依次判別能否被I整除,只要有一個(gè)能整除,m就不是素?cái)?shù),否則m是素?cái)?shù)。 Private Function prime(ByVal n%) As Boolean Dim i % prime=true For i = 2 To sqr(n) If n Mod I = 0 Then Prime=falseExit Forendif Next I End Function 3、進(jìn)制轉(zhuǎn)換算法說(shuō)明 1) 十進(jìn)制正整數(shù)m轉(zhuǎn)換為R(216)進(jìn)制的字符串。 思路: 將m不斷除r取余數(shù),直到商為0,將余數(shù)反序即得到結(jié)果。 算法實(shí)現(xiàn): Private Function Tran(ByVal m As Integer, ByVal r As Integer) As String Dim StrDtoR As String, n As Integer Do While m o n = m Mod r m = m r If n 9 Then StrDtoR = Chr(65 + n - 10) & StrDtoR Else StrDtoR = n & StrDtoR End If Loop Tran = StrDtoR End Function 2) R(216)進(jìn)制字符串轉(zhuǎn)換為十進(jìn)制正整數(shù)。 思路:R進(jìn)制數(shù)每位數(shù)字乘以權(quán)值之和即為十進(jìn)制數(shù)。 算法實(shí)現(xiàn): Private Function Tran(ByVal s As String, ByVal r As Integer) As integer Dim n As Integer, dec As Integer s = UCase(Trim(s) For i% = 1 To Len(s) If Mid(s, i, 1) = A Then n = Asc(Mid(s, i, 1) - Asc(A) + 10 Else n = Val(Mid(s, i, 1) End If dec = dec + n * r (Len(s) - i) Next i Tran = dec End Function 4、排序問(wèn)題(1)選擇排序法(升序)基本思想:1)對(duì)有n個(gè)數(shù)的序列(存放在數(shù)組a(n)中),從中選出最小的數(shù),與第1個(gè)數(shù)交換位置;2)除第1 個(gè)數(shù)外,其余n-1個(gè)數(shù)中選最小的數(shù),與第2個(gè)數(shù)交換位置;3)依次類(lèi)推,選擇了n-1次后,這個(gè)數(shù)列已按升序排列。Option base 1Sub sort(a() as integer)Dim i%,j%,t%,p%,n%N=ubound(a)For i = 1 To n - 1 p = i For j = i + 1 To n If a(j) a(p) Then p = j Next j t = a(i) a(i) = a(p) a(p) = tNext iEnd sub2冒泡法排序(升序) 基本思想:(將相鄰兩個(gè)數(shù)比較,小的調(diào)到前頭)1)有n個(gè)數(shù)(存放在數(shù)組a(n)中),第一趟將每相鄰兩個(gè)數(shù)比較,小的調(diào)到前頭,經(jīng)n-1次兩兩相鄰比較后,最大的數(shù)已“沉底”,放在最后一個(gè)位置,小數(shù)上升“浮起”;2)第二趟對(duì)余下的n-1個(gè)數(shù)(最大的數(shù)已“沉底”)按上法比較,經(jīng)n-2次兩兩相鄰比較后得次大的數(shù);3)依次類(lèi)推,n個(gè)數(shù)共進(jìn)行n-1趟比較,在第j趟中要進(jìn)行n-j次兩兩比較。程序段如下Sub sort(a() as integer)Dim i%,j%,n%,t%n=ubound(a)For i = 1 To n - 1 For j = 1 To n-i If a(j) a(j+1) Then temp=a(j): a(j)=a(j+1): a(j+1)=temp End if Next jNext i End sub5、查找問(wèn)題1順序查找法(在一列數(shù)中查找某數(shù)x) 基本思想:一列數(shù)放在數(shù)組a(1)-a(n)中,待查找的數(shù)放在x 中,把x與a數(shù)組中的元素從頭到尾一一進(jìn)行比較查找。用變量p表示a數(shù)組元素下標(biāo),p初值為1,使x與a(p)比較,如果x不等于a(p),則使p=p+1,不斷重復(fù)這個(gè)過(guò)程;一旦x等于a(p)則退出循環(huán);另外,如果p大于數(shù)組長(zhǎng)度,循環(huán)也應(yīng)該停止。(這個(gè)過(guò)程可由下語(yǔ)句實(shí)現(xiàn)) p = 1 Do While x a(p) And p =n p = p + 1 Loop下面寫(xiě)一查找函數(shù)Find,若找到則返回下標(biāo)值,找不到返回0Option Base 1Private Function Find( a( ) As Single,x As Single) As Integer Dim n%,p% n=Ubound( a )p = 1Do While x a(p) And p n then p=0 Find=pEnd Function 基本思想:一列數(shù)放在數(shù)組a(1)-a(n)中,待查找的關(guān)鍵值為key,把key與a數(shù)組中的元素從頭到尾一一進(jìn)行比較查找,若相同,查找成功,若找不到,則查找失敗。(查找子過(guò)程如下。index:存放找到元素的下標(biāo)。)Public Sub Search(a() As Variant, key As Variant, index%) Dim i% For i = LBound(a) To UBound(a) If key = a(i) Then index = i Exit Sub End If Next i index = -1End Sub2折半查找法(只能對(duì)有序數(shù)列進(jìn)行查找)基本思想:設(shè)n個(gè)有序數(shù)(從小到大)存放在數(shù)組a(1)-a(n)中,要查找的數(shù)為x。用變量bot、top、mid 分別表示查找數(shù)據(jù)范圍的底部(數(shù)組下界)、頂部(數(shù)組的上界)和中間,mid=(top+bot)/2,折半查找的算法如下:(1)x=a(mid),則已找到退出循環(huán),否則進(jìn)行下面的判斷;(2)xa(mid),x必定落在mid+1和top的范圍之內(nèi),即bot=mid+1;(4)在確定了新的查找范圍后,重復(fù)進(jìn)行以上比較,直到找到或者bot=top。將上面的算法寫(xiě)成如下函數(shù),若找到則返回該數(shù)所在的下標(biāo)值,沒(méi)找到則返回-1。Function search(a() As Integer, x As Integer) As Integer Dim bot%, top%, mid% Dim find As Boolean 代表是否找到 bot = LBound(a) top = UBound(a) find = False 判斷是否找到的邏輯變量,初值為False Do While bot = top And Not find mid = (top + bot) 2 If x = a(mid) Then find = True Exit Do ElseIf x a(p) and p a(p) And p a(row, Column) Then Max = a(i, j) row = i Column = j End If Next jNext iPrint 最大元素是; MaxPrint 在第 & row & 行,; 第 & Column & 列8、迭代法算法思想:對(duì)于一個(gè)問(wèn)題的求解x,可由給定的一個(gè)初值x0,根據(jù)某一迭代公式得到一個(gè)新的值x1,這個(gè)新值x1比初值x0更接近要求的值x;再以新值作為初值,即:x1x0,重新按原來(lái)的方法求x1,重復(fù)這一過(guò)和直到|x1-x0| 0.00001 Fsqrt=x1End Function9、字符串的一般處理1簡(jiǎn)單加密和解密 加密的思想是: 將每個(gè)字母C加(或減)一序數(shù)K,即用它后的第K個(gè)字母代替,變換式公式: c=chr(Asc(c)+k) 例如序數(shù)k為5,這時(shí) A F, a f,B G 當(dāng)加序數(shù)后的字母超過(guò)Z或z則 c=Chr(Asc(c)+k -26) 例如:You are good Dtz fwj ltti 解密為加密的逆過(guò)程 將每個(gè)字母C減(或加)一序數(shù)K,即 c=chr(Asc(c)-k), 例如序數(shù)k為5,這時(shí) ZU, zu,YT 當(dāng)加序數(shù)后的字母小于A或a則 c=Chr(Asc(c)-k +26)下段程序是加密處理:i = 1: strp = nL = Len(RTrim(strI)Do While (i = A And strT Asc(Z) Then iA = iA - 26 strp = strp + Chr$(iA) ElseIf (strT = a And strT Asc(z) Then iA = iA - 26 strp = strp + Chr$(iA) Else strp = strp + strT End If i = i + 1 LoopPrint strp2統(tǒng)計(jì)文本單詞的個(gè)數(shù) 算法思路: (1)從文本(字符串)的左邊開(kāi)始,取出一個(gè)字符;設(shè)邏輯量WT表示所取字符是否是單詞內(nèi)的字符,初值設(shè)為False (2)若所取字符不是“空格”,“逗號(hào)”,“分號(hào)”或“感嘆號(hào)”等單詞的分隔符,再判斷WT是否為T(mén)rue,若WT不為T(mén)rue則表是新單詞的開(kāi)始,讓單詞數(shù)Nw=Nw+1,讓W(xué)T=True; (3)若所取字符是“空格”,“逗號(hào)”,“分號(hào)”或“感嘆號(hào)”等單詞的分隔符, 則表示字符不是單詞內(nèi)字符,讓W(xué)T=False;(4) 再依次取下一個(gè)字符,重得(2)(3)直到文本結(jié)束。下面程序段是字符串strI中包含的單詞數(shù)Nw = 0: Wt = FalsestrI = I am a student,I am a teachernL = Len(RTrim(strI)For i = 1 To nL strT = Mid$(strI, i, 1) 取第i個(gè)字符 Select Case strT Case , , ;, ! Wt = False Case Else If Not Wt Then Nw = Nw + 1 Wt = True End If End SelectNext iPrint 單詞數(shù)為:, Nw10、窮舉法窮舉法(又稱(chēng)“枚舉法”)的基本思想是:一一列舉各種可能的情況,并判斷哪一種可能是符合要求的解,這是一種“在沒(méi)有其它辦法的情況的方法”,是一種最“笨”的方法,然而對(duì)一些無(wú)法用解析法求解的問(wèn)題往往能奏效,通常采用循環(huán)來(lái)處理窮舉問(wèn)題。例: 將一張面值為100元的人民幣等值換成100張5元、1元和0.5元的零鈔,要求每種零鈔不少于1張,問(wèn)有哪幾種組合?Dim i%, j%, k%Print 5元 1元 0.5元For i = 1 To 20 For j = 1 To 100 - i k = 100 - i - j If 5.0 * i + 1.0 * j + 0.5 * k = 100 Then Print i, j, k End If Next j Next i11、遞歸算法用自身的結(jié)構(gòu)來(lái)描述自身,稱(chēng)遞歸VB允許在一個(gè)Sub子過(guò)程和Function過(guò)程的定義內(nèi)部調(diào)用自己,即遞歸Sub子過(guò)程和遞歸Function函數(shù)。遞歸處理一般用棧來(lái)實(shí)現(xiàn),每調(diào)用一次自身,把當(dāng)前參數(shù)壓棧,直到遞歸結(jié)束條件;然后從棧中彈出當(dāng)前參數(shù),直到棧空。遞歸條件:(1)遞歸結(jié)束條件及結(jié)束時(shí)的值;(2)能用遞歸形式表示,且遞歸向終止條件發(fā)展。例:編fac(n)=n! 的遞歸函數(shù) Function fac(n As Integer) As Integer If n = 1 Then fac = 1 Elsefac = n * fac(n - 1) End IfEnd Function ASCII碼表 信息在計(jì)算機(jī)上是用二進(jìn)制表示的,這種表示法讓人理解就很困難。因此計(jì)算機(jī)上都配有輸入和輸出設(shè)備,這些設(shè)備的主要目的就是,以一種人類(lèi)可閱讀的形式將信息在這些設(shè)備上顯示出來(lái)供人閱讀理解。為保證人類(lèi)和設(shè)備,設(shè)備和計(jì)算機(jī)之間能進(jìn)行正確的信息交換,人們編制的統(tǒng)一的信息交換代碼,這就是ASCII碼表,它的全稱(chēng)是“美國(guó)信息交換標(biāo)準(zhǔn)代碼”。八進(jìn)制十六進(jìn)制十進(jìn)制字符八進(jìn)制十六進(jìn)制十進(jìn)制字符00000nul100406401011soh1014165A02022stx1024266B03033etx1034367C04044eot1044468D05055enq1054569E06066ack1064670F07077bel1074771G10088bs1104872H11099ht1114973I120a10nl1124a74J130b11vt1134b75K140c12ff1144c76L150d13er1154d77M160e14so1164e78N170f15si1174f79O201016dle1205080P211117dc11215181Q221218dc21225282R231319dc31235383S241420dc4124548

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論