1、求最小值的方法类同。求若干数平均值,实质上就是先求和,再除以这些数的个数。应用举例:随机产生n个1-100 (包括1和100)的数,求它们的最大值、最小值和 平均值。Dim n%, i%, min%, max%, aver!, s%n 二 Val(lnputBox(输入个数:s = Int (Rnd * 100) + 1max = s : min = s : aver = s第1个数是:” & sFor i = 2 To ns = In t(R nd * 100) + 1第” & i & ” 个数是:If s max The n max = sIf s min The n min = save
2、r = aver + saver = aver/nPrin t max= max; min二;min;aver二aver解题技巧:最大值、最小值、平均值类型题目往往和数组放在一起考!有的不仅求这 些值,还要对具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在 记录最大、最小值时,同时记录该值所在的行号和列号。3.素数问题素数(质数):就是一个大于等于 2的整数,并且只能被1和本身整除,而不能被其他整数整除的数。判别某数m是否是素数的经典算法是:对于m,从I = 2, 3, 4,m-1依次判别能否被I整除,只要有一个能整 除,m就不是素数,否则m是素数。Private Fun cti
3、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很显然,实际上,我们可以改进上面Dim i as In tegerFor i = 2 to In t(Sqr( n)If X Mod i = 0 The n Exit Fun ctionsushu = True这样可以很好的提高效率。以上判断是否为素数的代码务必识记!求100-200之内素数。D
4、im j As In tegerFor j = 100 To 200If sushu(j) = True ThenPrint jEnd IfNext j实例说明编程题:找出10000以内所有可以表示为两个平方数和的素数。思路:首先找10000以内的所有素数,对于每个素数判断其是否可以表示为两个平 方数之和(即对于任意小于该素数 shu的数I,如果I和shu- I均为平方数,则说明其可以表示为两个平方数之和。)判断数I是否为平方数的方法:Sqr(i) = Int(Sqr(i)Dim j As In teger, m Asin teger, n As In tegerFor j = 2 To 10
5、000If pf(j, m, n)二 True The n Listl.Addltem j &二& m &+ & nPrivate Fun cti on pf(ByVal shu As In teger, m As In teger, n As In teger) As Boolea 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 onNext4.进制转换1
6、)十进制正整数m转换为R (2- 16)进制的字符串。将m不断除r取余数,直到商为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 on 二 m Mod rm = m rIf n 9 The nStrDtoR = Chr(65 + n - 10) & StrDtoRElseStrDtoR = n &Tran 二 StrDtoR2)R( 2- 16)进制字符串转
7、换为十进制正整数。 思路: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 tegers = UCase(Trim(s)For i = 1 To Len(s)If Mid(s, i, 1) = A The nn 二 Asc(Mid(s, i, 1) - Asc() + 10n 二 Val(Mid(s, i, 1)dec = dec + n * r 八(Le n(s
8、) - i)Tran 二 dec进制转化的原理要清楚,同时编写代码时候要留意 16进制中的A - F字符的处理。算法(五)约数因子-5.最大公约数、最小公倍数1)最大公约数:用辗转相除法求两自然数 m、n的最大公约数。(1)首先,对于已知两数 m、n,比较并使得mn;(2)m除以n得余数r;(3)若r= 0,则n为求得的最大公约数,算法结束;否则执行步骤 (4)分析步骤:m二24, n二924 与 9 r = m Mod n 二 620, m = 9, n 二 6 r = m Mod n 二 320, m = 6, n 二 3 r = m Mod n 二 0 3为最大公约数。m n nr再重复
9、执行(2)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 = nn 二 rGCD = nPrivate Function GCD(ByVal m As Long, ByVai n As Long) As Long
10、Dim temp As Long, r As LongIf r = 0 The nm = nGCD = GCD( m, n)2)最小公倍数:mx n眾大公约数3)互质数:最大公约数为1的两个正整数该算法需要识记!这种类型题目的扩展是 约数和因子题型6.排序1)选择法排序(1)从n个数中选出最小数的下标,出了循环,将最小数与第一个数交换位置;(2)除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个 数交换位置;(3)譬如:第一轮交换后 第二轮交换后 第三轮交换后 第四轮交换后 第五轮无交换以此类推,最后构成递增序列。8 6 9 3 2 72 6 9 3 8 72 3 9 6
11、8 72 3 6 9 8 72 3 6 7 8 9程序代码如下:Private Sub xzPaiXu(a() As Double, she ng As Boolea n)a为需要排序的数组,she ng为True则为升序排列,为False,则为降序排列。Dim i As In teger, j As 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) 在剩下的元素中找
12、出最值元素的下标并赋值给If she ng The n 若为升序,则m记录最小元素下标,否则记录最大元素下标 If a(j) temp = a(i): a(i) = a(m): a(m) = temp 将最值元素与第i个元素交换调用该过程示例:Optio n Base 1Dim 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)2)冒泡法排序选择排序法在每一轮排序时找最值元素的下标,出了内循环(一轮排
13、序结束),再 交换最小数的位置;而冒泡法在每一轮排序时将相邻的数比较,当次序不对就交换 位置,出了内循环,最值数已经冒出。799 76 8863 32 - 29 98 87 76 6程序代码如下: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 Double进行n-1轮比较从n到i个元素两两进行比较 若次序不对,马上进行交换For i = LBou nd(a) To UB
14、ou nd(a) - 1 For j = UBou nd(a) To i + 1 Step -1 If she ng ThenIf a(j) a(j - 1) Thentemp = a(j) : a(j) = a(j - 1) : a(j - 1) = temp End If a(j - 1) The n temp = a(j) : a(j - 1) = tempNext j 出了内循环,一轮排序结束,最值元素冒到最上边数组元素插入删除-7.在数组中插入或删除元素数组中元素的插入和删除一般是在已固定序列的数组中插入或删除一个元素,使 得插入或删除操作后的数组还是有序的。基本思路:首先要找到插入
15、位置或要删除的元素。1)插入代码如下:Dim a(10) As In teger, i As In teger, k As In tegerFor i = 0 To 9 生成数组a(i) = i * 3 + 1Print a(i);Print插入 14For k = 0 To 9 查找插入14在数组中的位置If 14 Asc() The n iAsc = iAsc - 26Code = Code & Chr(iAsc)az) Then iAsc = iAsc - 26Case Else cEnd SelectText2.Text = Code2)统计:统计字符或者数字出现的次数。算法说明:以字
16、符统计为例,设基本问题如下:请统计一段文本中英文字母在文本 中出现的次数。(不区分大小写)如: I am a student.得到:A:2 d:1 e:1 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出现的次数Dim i As Integer, j As Integer, zimu(25) As Integer, allStr As String, aStr As String allStr = UCase(Textl.Text)For i = 1 To Len (Textl.Text)aStr = Mid(allStr, i, 1)If aStr And aStr zimu(Asc(aStr) - Asc() = zimu(Asc(aStr) - Asc() + 1 End IfFor i = 0 To 25If zimu(i) 0 The nj = j + 1Text2.Text = Text2.Text & C
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1