![VB常用十大算法_第1頁](http://file4.renrendoc.com/view/37cc3295092aad8b026761205ee5b81a/37cc3295092aad8b026761205ee5b81a1.gif)
![VB常用十大算法_第2頁](http://file4.renrendoc.com/view/37cc3295092aad8b026761205ee5b81a/37cc3295092aad8b026761205ee5b81a2.gif)
![VB常用十大算法_第3頁](http://file4.renrendoc.com/view/37cc3295092aad8b026761205ee5b81a/37cc3295092aad8b026761205ee5b81a3.gif)
![VB常用十大算法_第4頁](http://file4.renrendoc.com/view/37cc3295092aad8b026761205ee5b81a/37cc3295092aad8b026761205ee5b81a4.gif)
![VB常用十大算法_第5頁](http://file4.renrendoc.com/view/37cc3295092aad8b026761205ee5b81a/37cc3295092aad8b026761205ee5b81a5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1.累加與連乘 1、算法說明連乘形式:V=V*e分析累加形式:V=V+e其中:V是變量,e是遞增表達式。累加和連乘一般通過循環(huán)結構來實現。注意:需在執(zhí)行循環(huán)體前對變量V賦初值。一般累加時置初值0;連乘時置初值為1舉例求N!的結果。PrivateSubCommand1_Click()Dimn%,i%,s&n=Val(lnputBox(輸入n)s=1Fori=1TonNextiPrintsEndSub應用舉例根據下列公式,求自然對數e的的近似值1=1+-1要求:誤差小于0.00001PrivateSubCommand1_Click()Dimi%,n&,t!,e!e=2i=1t=1DoWhilet0
2、.00001i=i+1t=t/ie=e+tLoopPrint計算了;i;項目和是:;ePrintExp(1)與上句輸出值進行對比以證明算法的正確性EndSub2.最值問題1、算法說明3.素數問題 在若干數中求最大值,一般先取第一個數為最大值的初值(即假設第一個數為最大值),然后,在循環(huán)體內將每一個數與最大值比較,若該數大于最大值,將該數替換為最大值,直到循環(huán)結束。求最小值的方法類同。求若干數平均值,實質上就是先求和,再除以這些數的個數。應用舉例:隨機產生n個1-100(包括1和100)的數,求它們的最大值、最小值和平均值。PrivateSubCommand1_Click()Dimn%,i%,m
3、in%,max%,aver!,s%n二Val(lnputBox(輸入個數:)s=Int(Rnd*100)+1max=s:min=s:aver=sPrint第1個數是:”&sFori=2Tons=Int(Rnd*100)+1Print第”&i&”個數是:”&sIfsmaxThenmax=sIfsminThenmin=saver=aver+sNextiaver=aver/nPrintmax=;max;min二;min;aver二;averEndSub解題技巧:最大值、最小值、平均值類型題目往往和數組放在一起考!有的不僅求這些值,還要對具有最大值或者最小值的行或列或者某個元素進行處理,這時就要在記錄
4、最大、最小值時,同時記錄該值所在的行號和列號。1、算法說明素數(質數):就是一個大于等于2的整數,并且只能被1和本身整除,而不能被其他整數整除的數。判別某數m是否是素數的經典算法是:對于m,從I二2,3,4,m-1依次判別能否被I整除,只要有一個能整除,m就不是素數,否則m是素數。PrivateFunctionsushu(ByValnAsInteger)AsBooleanDimiAsIntegerFori=2Ton-1If(nModi)=0ThenExitForNextIIfI=nthensushuTrueEndFunction很顯然,實際上,我們可以改進上面PrivateFunctionsu
5、shu(ByValnAsInteger)AsBooleanDimiasIntegerFori=2toInt(Sqr(n)IfXModi=0ThenExitFunctionNextisushu=TrueEndFunction這樣可以很好的提高效率。以上判斷是否為素數的代碼務必識記!應用舉例:求100-200之內素數。PrivateSubCommand1_Click()DimjAsIntegerForj=100To200Ifsushu(j)=TrueThenPrintjEndIfNextjEndSub實例說明編程題:找出10000以內所有可以表示為兩個平方數和的素數。思路:首先找10000以內的所
6、有素數,對于每個素數判斷其是否可以表示為兩個平方數之和(即對于任意小于該素數shu的數I,如果I和shu-I均為平方數,則說明其可以表示為兩個平方數之和。)判斷數I是否為平方數的方法:Sqr(i)=lnt(Sqr(i)PrivateSubCommand1_Click()DimjAsInteger,mAsinteger,nAsIntegerForj=2To10000Ifsushu(j)=TrueThenIfpf(j,m,n)TrueThenListI.Additemj&一&m&+&nEndIfEndIfNextjEndSubPrivateFunctionpf(ByVaIshuAsInteger,
7、mAsInteger,nAsInteger)AsBooIeanDimiAsLongFori=1Toshu-1If(Sqr(i)=Int(Sqr(i)And(Sqr(shu-i)=Int(Sqr(shu-i)Thenpf=Truem=in一shu-iExitFunctionEndIfNextEndFunction5.最大公約數、最小公倍數5.最大公約數、最小公倍數4.進制轉換 1、算法說明十進制正整數m轉換為R(2-16)進制的字符串。思路:將m不斷除r取余數,直到商為0,將余數反序即得到結果。算法實現:PrivateFunctionTran(ByVaimAsInteger,ByVairAsIn
8、teger)AsStringDimStrDtoRAsString,nAsIntegerDoWhilemon二mModrm=mrIfn9ThenStrDtoR=Chr(65+n-10)&StrDtoRElseStrDtoR=n&StrDtoREndIfLoopTran二StrDtoREndFunctionR(2-16)進制字符串轉換為十進制正整數。思路:R進制數每位數字乘以權值之和即為十進制數。算法實現:PrivateFunctionTran(ByVaisAsString,ByVairAsInteger)AsIntegerDimiasInteger,nAsInteger,decAsInteger
9、s=UCase(Trim(s)Fori=1ToLen(s)IfMid(s,i,1)=AThenn二Asc(Mid(s,i,1)-Asc(A)+10Elsen二Val(Mid(s,i,1)EndIfdec=dec+n*r八(Len(s)-i)NextiTran二decEndFunction解題技巧:進制轉化的原理要清楚,同時編寫代碼時候要留意16進制中的A-F字符的處理。算法(五)約數因子-1、算法說明1)最大公約數:用輾轉相除法求兩自然數m、n的最大公約數。首先,對于已知兩數m、n,比較并使得mn;m除以n得余數r;(3)若r=0,則n為求得的最大公約數,算法結束;否則執(zhí)行步驟分析步驟:m24
10、,n924與9r=mModn6(4)mnnr再重復執(zhí)行(2)20,m=9,n二二6r一mModn-320,m-6,n二3r一mModn-03為最大公約數。分析步驟:10與5m=10,n二5r=mModn一0|所以n(n=5)為最大公約數算法實現:循環(huán)PrivateFunctionGCD(ByValmAsLong,ByVainAsLong)AsLongDimtempAsLong,rAsLongIfmnThentemp=m:m=n:n一tempDor=mModnIfr=0ThenExitDom=nnrLoopGCD=nEndFunction算法實現:遞歸PrivateFunctionGCD(ByV
11、almAsLong,ByVainAsLong)AsLongDimtempAsLong,rAsLongIfmnThentemp=m:m=n:n一tempr=mModnIfr=0ThenGCD=nElsenrGCD=GCD(m,n)EndIfEndFunction最小公倍數:mxn眾大公約數互質數:最大公約數為1的兩個正整數解題技巧:該算法需要識記!這種類型題目的擴展是約數和因子題型 6.排序1、算法說明1)選擇法排序從n個數中選出最小數的下標,出了循環(huán),將最小數與第一個數交換位置;除第一個數外,在剩下的n-1個數中再按方法(1)選出次小的數,與第二個數交換位置;以此類推,最后構成遞增序列。譬如:
12、869327第一輪交換后269387第二輪交換后239687第三輪交換后236987第四輪交換后236789第五輪無交換236789程序代碼如下:PrivateSubxzPaiXu(a()AsDouble,shengAsBoolean)a為需要排序的數組,sheng為True則為升序排列,為False,則為降序排列。DimiAsInteger,jAsInteger,tempAsDouble,mAsIntegerFori=LBound(a)ToUBound(a)-1進行數組大小-1輪比較m=i在第i輪比較時,假定第i個元素為最值元素Forj=i+1ToUBound(a)在剩下的元素中找出最值元素
13、的下標并賦值給IfshengThen若為升序,則m記錄最小元素下標,否則記錄最大元素下標Ifa(j)a(m)Thenm=jEndIfNextjtemp=a(i):a(i)=a(m):a(m)=temp將最值元素與第i個元素交換NextiEndSub調用該過程示例:OptionBase1PrivateSubCommand1_Click()Dimb(6)AsDoubleb(1)=8:b(2)=6:b(3)=9:b(4)=3:b(5)=2:b(6)=7CallxzPaiXu(b,True)Fori%=1To6Printb(i)NextEndSub2)冒泡法排序選擇排序法在每一輪排序時找最值元素的下標
14、,出了內循環(huán)(一輪排序結束),再交換最小數的位置;而冒泡法在每一輪排序時將相鄰的數比較,當次序不對就交換位置,出了內循環(huán),最值數已經冒出。669933227第一輪排序:從右至左將最小的數移至最右邊。7866922-93-37872-86-699337733868977693366778899程序代碼如下:PrivateSubmpPaiXu(a()AsDouble,shengAsBoolean)a為需要排序的數組,sheng為True則為升序排列,為False,貝卩為降序排列DimiAsInteger,jAsInteger,tempAsDoubleFori=LBound(a)ToUBound(a
15、)-1Forj進行n-i輪比較=UBound(a)Toi+1Step-1Ifsheng從n到i個元素兩兩進行比較Then若次序不對,馬上進行交換Ifa(j)a(j-1)Thentemp=a(j):a(j)=a(j-1):a(j-1)=tempEndIfEndIfNextj出了內循環(huán),一輪排序結束,最值元素冒到最上邊NextiEndSub數組元素插入刪除-7.在數組中插入或刪除元素 1、算法說明數組中元素的插入和刪除一般是在已固定序列的數組中插入或刪除一個元素,使得插入或刪除操作后的數組還是有序的?;舅悸罚菏紫纫业讲迦胛恢没蛞獎h除的元素。1)插入代碼如下:Dima(10)AsInteger,
16、iAsInteger,kAsIntegerFori=0To9生成數組a(i)=i*3+1Printa(i);NextiPrintPrint插入14Fork=0To9查找插入14在數組中的位置If14high沒有查找到Thenindex=-1ExitSubEndIfmid=(low+high)2IfKey=a(mid)Thenindex=mid取查找區(qū)間的中點查找到,返回下標ExitSubElseIfKeyAsc(Z)TheniAsc=iAsc-26Code=Code&Chr(iAsc)CaseaToziAsc-26iAsc=Asc(c)+5IfiAscAsc(z)TheniAsc=Code=C
17、ode&Chr(iAsc)CaseElseCode=Code&cEndSelectNextiText2.Text=CodeEndSub2)統(tǒng)計:統(tǒng)計字符或者數字出現的次數。算法說明:以字符統(tǒng)計為例,設基本問題如下:請統(tǒng)計一段文本中英文字母在文本中出現的次數。(不區(qū)分大小寫)女如:Iamastudent得到:A:2d:1e:1l:1m:1n:1s:1t:2u:1分析:由于不區(qū)分大小寫,因此可定義一個大小為26(下標:025)的數組,每個元素依次記錄A、B、CZ字母出現的次數。A(0)存放字母a出現的次數A(1)存放字母b出現的次數A(2)存放字母c出現的次數代碼如下:OptionExplicitPrivateSubCommand1_Click()DimiAsInteger,jAsInteger,zimu(25)AsInteger,allStrAsString,aStrAsStringallStr=UCase(Textl.Text)Fori=1ToLen(Textl.Text)aStr=Mid(allStr,i,1)IfaSt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- .7市場部培訓紫琪爾項目
- 2025年全球及中國無人機測量軟件行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年全球及中國珍珠奶茶配料行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年全球及中國電信行業(yè)CRM軟件行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年全球及中國便攜式四合一氣體檢測儀行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年全球及中國塑料輔助設備行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球機器人滾珠絲杠行業(yè)調研及趨勢分析報告
- 2025年全球及中國一次性發(fā)熱暖袋行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年全球及中國金屬箔電流傳感貼片電阻行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球貓咪吹風機行業(yè)調研及趨勢分析報告
- 2024-2025學年廣東省深圳市南山區(qū)監(jiān)測數學三年級第一學期期末學業(yè)水平測試試題含解析
- 廣東2024年廣東金融學院招聘專職輔導員9人筆試歷年典型考點(頻考版試卷)附帶答案詳解
- DB31∕731-2020 船舶修正總噸單位產品能源消耗限額
- 2024年衛(wèi)生專業(yè)技術資格考試衛(wèi)生檢驗技術(初級(師)211)相關專業(yè)知識試題及答案指導
- 《手衛(wèi)生知識培訓》培訓課件
- 江蘇省南京鼓樓區(qū)2024年中考聯(lián)考英語試題含答案
- 兒科護理學試題及答案解析-神經系統(tǒng)疾病患兒的護理(二)
- 15篇文章包含英語四級所有詞匯
- 王陽明心學完整版本
- 四年級上冊豎式計算300題及答案
- 《智能投顧 大數據智能驅動投顧創(chuàng)新》讀書筆記思維導圖
評論
0/150
提交評論