VB常用十大算法

上传人:gao****ang 文档编号:154086255 上传时间:2022-09-20 格式:DOCX 页数:20 大小:99KB
收藏 版权申诉 举报 下载
VB常用十大算法_第1页
第1页 / 共20页
VB常用十大算法_第2页
第2页 / 共20页
VB常用十大算法_第3页
第3页 / 共20页
资源描述:

《VB常用十大算法》由会员分享,可在线阅读,更多相关《VB常用十大算法(20页珍藏版)》请在装配图网上搜索。

1、1、算法说明连乘形式: V=V*e分析累加形式:V=V+e 其中:V是变量,e是递增表达式。累加和连乘一般通过循环结构来实现。注意:需在执行循环体前对变量 V 赋初值。一般累加时置初值 0;连乘时置初值为 1 举 例求N!的结果。Private Sub Comma nd1_Click()Dim n%, i%, s&n = Val(lnputBox(输入 n)s = 1For i = 1 To nNext iPr int sEnd Sub应用举例根据下列公式,求自然对数 e 的的近似值1 = 1+ -1要求:误差小于 0.00001Private Sub Comma nd1_Click()Dim

2、 i%, n&, t!, e!e = 2i = 1t = 1Do While t 0.00001i = i + 1t = t / i e = e + tLoop Print计算了 ; i;项目和是:;ePrint Exp(1) 与上句输出值进行对比以证明算法的正确性End Sub2.最值问题1、算法说明在若干数中求最大值,一般先取第一个数为最大值的初值(即假设第一个数为 最大 值),然后,在循环体内将每一个数与最大值比较,若该数大于最大值,将该 数替换为最大 值,直到循环结束。求最小值的方法类同。 求若干数平均值,实质上就是先求和,再除以这些数的个数。应用举例:随机产生 n 个 1-100 (

3、包括 1 和 100)的数,求它们的最大值、最小值和 平均 值。Private Sub Comma nd1_Click()Dim n%, i%, min%, max%, aver!, s%n 二 Val(lnputBox(输入个数:)s = Int (Rnd * 100) + 1max = s : min = s : aver = sPrint第1个数是:” & sFor i = 2 To ns = In t(R nd * 100) + 1Print第” & i & ” 个数是:” & sIf s max The n max = sIf s min The n min = saver = av

4、er + sNext iaver = aver/nPrin t max=; max; min 二; min; aver 二; averEnd Sub 解题技巧:最大值、最小值、平均值类型题目往往和数组放在一起考!有的不仅求这 些 值,还要对具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在 记录最大、 最小值时,同时记录该值所在的行号和列号。1、算法说明 素数(质数):就是一个大于等于 2 的整数,并且只能被 1 和本身整除,而不 能被其他整数整除的数。判别某数 m 是否是素数的经典算法是:对于m,从I二2, 3, 4,m-1依次判别能否被I整除,只要有一个能整 除,m就 不是素数,

5、否则 m 是素数。Private Fun cti on sushu(ByVal n As In teger) As Boolea nDim i As In tegerFor i = 2 To n - 1If (n Mod i) = 0 The n Exit ForNext IIf I = n the n sushu 二 TrueEnd Fun cti on 很显然,实际上,我们可以改进上面 Private Fun cti on sushu(ByVal n As In teger) As Boolea nDim i as In tegerFor i = 2 to In t(Sqr( n)If X

6、 Mod i = 0 The n Exit Fun ctionNext isushu = TrueEnd Fun cti on 这样可以很好的提高效率。以上判断是否为素数的代码务必识记!应用举例:求 100-200 之内素数。Private Sub Comma nd1_Click()Dim j As In tegerFor j = 100 To 200If sushu(j) = True ThenPrint jEnd IfNext jEnd Sub实例说明编程题:找出 10000 以内所有可以表示为两个平方数和的素数。思路:首先找 10000 以内的所有素数,对于每个素数判断其是否可以表示为两

7、个平 方数之 和(即对于任意小于该素数shu的数I,如果I和shu- I均为平方数,则说明其可以表示为两个平方数之和。)判断数I是否为平方数的方法:Sqr(i) = lnt(Sqr(i)Private Sub Comma nd1_Click()Dim j As In teger, m Asin teger, n As In tegerFor j = 2 To 10000If sushu(j) = True ThenIf pf(j, m, n) True The n List I. Additem j & 一 & m & + & n End IfEnd IfNext jEnd SubPrivat

8、e Fun cti on pf(ByVaI shu As In teger, m As In teger, n As In teger) As BooIea n Dim i As LongFor i = 1 To shu - 1If (Sqr(i) = In t(Sqr(i) And (Sqr(shu - i) = In t(Sqr(shu - i) The n pf = True m = i n 一 shu - iExit Fun cti onEnd IfNextEnd Fun cti on1、算法说明1) 十进制正整数 m 转换为 R (2- 16)进制的字符串。思路:将m不断除r取余数,

9、直到商为0,将余数反序即得到结果。算法实现:Private Fun cti on Tran( ByVai m As In teger, ByVai r As In teger) As Stri ngDim StrDtoR As Stri ng, n As In tegerDo While m o n 二 m Mod r m = m rIf n 9 The nStrDtoR = Chr(65 + n - 10) & StrDtoR ElseStrDtoR = n & StrDtoREnd IfLoopTran 二 StrDtoREnd Fun cti on2) R( 2- 16)进制字符串转换为

10、十进制正整数。 思路: R 进制数每位数字乘以权值之 和即为十进制数。 算法实现:Private Fun cti on Tran( ByVai s As Str ing, ByVai r As In teger) As In tegerDim i as In teger, n As In teger, dec As In teger s = UCase(Trim(s)For i = 1 To Len(s)If Mid(s, i, 1) = A The n n 二 Asc(Mid(s, i, 1) - Asc(A) + 10Else n 二 Val(Mid(s, i, 1)End Ifdec =

11、 dec + n * r 八(Le n(s) - i)Next iTran 二 decEnd Fun cti on解题技巧:进制转化的原理要清楚,同时编写代码时候要留意16进制中的A- F字符的处理。算法(五)约数因子-1、算法说明1)最大公约数:用辗转相除法求两自然数 m、n 的最大公约数。(1) 首先,对于已知两数m、n,比较并使得mn;(2) m 除以 n 得余数 r;(3) 若 r= 0,则 n 为求得的最大公约数,算法结束;否则执行步骤 分析步骤: m 24, n 924 与 9 r = m Mod n 6(4) m n nr再重复执行(2)20, m = 9, n二二6r 一 m

12、Mod n-320, m - 6, n二 3r 一 m Mod n-0 3为最大公约数。分析步骤:10与5m = 10, n 二 5r = m Mod n 一 0 |所以n(n=5)为最大公约数算法实现:循环Private Function GCD(ByVal m As Long, ByVai n As Long) As Long Dim temp As Long, r As LongIf m n The n temp = m: m = n: n 一 tempDor = m Mod nIf r = 0 Then Exit Do m = nnrLoopGCD = nEnd Fun cti on算

13、法实现:递归Private Function GCD(ByVal m As Long, ByVai n As Long) As LongDim temp As Long, r As LongIf m n The n temp = m: m = n: n 一 temp r = m Mod nIf r = 0 The n GCD = nElsen rGCD = GCD( m, n)End IfEnd Fun cti on2) 最小公倍数: mx n 眾大公约数3) 互质数:最大公约数为 1 的两个正整数解题技巧:该算法需要识记!这种类型题目的扩展是 约数和因子题型6.排序1、算法说明1)选择法排序

14、(1) 从 n 个数中选出最小数的下标,出了循环,将最小数与第一个数交换位置;(2) 除第一个数外,在剩下的 n-1 个数中再按方法(1)选出次小的数,与第二个 数交换位 置;(3) 以此类推,最后构成递增序列。譬如:869327第一轮交换后269387第二轮交换后239687第三轮交换后236987第四轮交换后236789第五轮无交换236789程序代码如下:Private Sub xzPaiXu(a() As Double, she ng As Boolea n)a为需要排序的数组,she ng为True则为升序排列,为False,则为降序排列。Dim i As In teger, j A

15、s In teger, temp As Double, m As In tegerFor i = LBound(a) To UBound(a) - 1进行数组大小-1 轮比较m = i在第 i 轮比较时,假定第 i 个元素为最值元素For j = i + 1 To UBou nd(a) 在剩下的元素中找出最值元素的下标并赋值给If she ng The n 若为升序,则 m 记录最小元素下标,否则记录最大元素下标 If a(j) a(m) The n m = jEnd IfNext jtemp = a(i): a(i) = a(m): a(m) = temp将最值元素与第 i 个元素交换Nex

16、t iEnd Sub调用该过程示例:Optio n Base 1Private Sub Comma nd1_Click()Dim b(6) As Doubleb(1) = 8 : b(2) = 6 : b(3) = 9 : b(4) = 3 : b(5) = 2 : b(6) = 7Call xzPaiXu(b, True)For i% = 1 To 6Print b(i)NextEnd Sub2)冒泡法排序选择排序法在每一轮排序时找最值元素的下标,出了内循环(一轮排序结束),再交换最小数 的位置;而冒泡法在每一轮排序时将相邻的数比较,当次序不对就交换位置,出了内循环, 最值数已经冒出。6 6

17、9 9 3 32 27第一轮排序: 从右至左将最小的数 移至最右边。78 6 69 22- 93- 37872- 86- 69 9 3 3 7 73 38 6 8 9 7 7693 36 67 78 89 9程序代码如下:Private Sub mpPaiXu(a() As Double, she ng As Boolea n)a为需要排序的数组,she ng为True则为升序排列,为False,贝卩为降序排列 Dim i As In teger, j As In teger, temp As DoubleFor i = LBou nd(a) To UBou nd(a) - 1 For j 进

18、行 n-i 轮比较=UBou nd(a) To i + 1 Step -1 If she ng 从n到i个元素两两进行比较 Then 若次序不对,马上进行交换If a(j) a(j - 1) The n temp = a(j) : a(j) = a(j - 1) : a(j - 1) = temp End IfEnd IfNext j出了内循环,一轮排序结束,最值元素冒到最上边Next iEnd Sub数组元素插入删除-1、算法说明 数组中元素的插入和删除一般是在已固定序列的数组中插入或删除一个元素,使 得插入 或删除操作后的数组还是有序的。基本思路:首先要找到插入位置或要删除的元素。1)插入

19、代码如下:Dim a(10) As In teger, i As In teger, k As In tegerFor i = 0 To 9生成数组a(i) = i * 3 + 1 Print a(i); Next i PrintPrint插入 14For k = 0 To 9查找插入 14 在数组中的位置If 14 high没有查找到The n in dex = -1Exit SubEnd Ifmid = (low + high) 2 If Key = a(mid) The n in dex = mid取查找区间的中点 查 找到,返回下标Exit SubElseIf Key Asc(Z) T

20、he n iAsc=iAsc - 26Code = Code & Chr(iAsc) Case a To ziAsc - 26iAsc = Asc(c) + 5If iAsc Asc(z) Then iAsc = Code = Code & Chr(iAsc)Case ElseCode = Code & cEnd SelectNext iText2.Text = CodeEnd Sub2)统计:统计字符或者数字出现的次数。 算法说明:以字符统计为例,设基本问题如下:请统计一段文本中英文字母在文本 中出现的次 数。(不区分大小写)女如: I am a student得到:A:2 d:1 e:1

21、l:1 m:1 n:1 s:1 t:2 u:1 分析:由于不区分大小写,因此可定义一个大小为26(下标: 0 25)的数组,每个元素依次记录A、B、CZ字母出现的次数。A(0)存放字母a出现的次数A(1)存放字母b出现的次数 A (2) 存放字母 c 出现的次数代码如下:Optio n ExplicitPrivate Sub Comma nd1_Click()Dim i As Integer, j As Integer, zimu(25) As Integer, allStr As String, aStr As String allStr = UCase(Textl.Text)For i =

22、 1 To Len (Textl.Text) aStr = Mid(allStr, i, 1) If aStr = A And aStr = Z The nzimu(Asc(aStr) - Asc(A) = zimu(Asc(aStr) - Asc(A) + 1 End If Next iFor i = 0 To 25If zimu(i) 0 The nj = j + 1Text2.Text = Text2.Text & Chr(i + Asc(A) & : & str(zimu(i) & If j Mod 5 = 0 The n Text2.Text = Text2.Text & Chr(13) & Chr(10)End If Next iEnd Sub解题技巧: 熟练运用字符处理函数,对于一些数论题,譬如逆序数等也可将数字通过 CStr 函 数转换为字符后,利用字符处理函数来解题。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!