計算機等級考試二級VB常用算法(9):排序

字號:

1、算法說明
    1) 初等數(shù)學
     遞推法
    又稱為“迭代法”,其基本思想是把一個復雜的計算過程轉化為簡單過程的多次重復。每次重復都在舊值的基礎上遞推出新值,并由新值代替舊值。
    問題:猴子吃桃子
    小猴子有若干桃子,第一天吃掉一半多一個;第二天吃掉剩下的一半多一個…..;如此,到第七天早上要吃時,只剩下一個桃子。問小猴子一開始共有多少桃子?
    分析:可以最后一天桃子數(shù)推出倒數(shù)第二天的桃子數(shù);再從倒數(shù)第二天推出倒數(shù)第三天桃子數(shù)………..
    設第n天桃子數(shù)為xn,前一天桃子數(shù)是:xn-1,則有關系:
    xn=xn-1/2-1
     程序如下:
    Private Sub Command1_Click()
     Dim n%, i%
     x = 1 '第七天桃子數(shù)
     Print "第七天桃子數(shù): 1只"
     For i = 6 To 1 Step -1
     x = (x + 1) * 2
     Print "第" & i & "天桃子數(shù):" & x & "只"
     Next i
    End Sub
     窮舉法
    又稱枚舉法,即將所有可能情況一一測試,判斷是否滿足條件,一般用循環(huán)實現(xiàn)。
    問題:百元買雞問題。
    假定小雞每只5角;公雞每只2元;母雞每只3元。現(xiàn)在有100元,要求買100只雞,編程列出所有可能的購雞方案。
    分析:
    設母雞、公雞、小雞分別x、y、z只,則有:
    x+y+z=100
    3x+2y+0.5z=100
     程序一:
     Private Sub Command1_Click()
     Dim x%, y%, z%
     For x = 0 To 100
     For y = 0 To 100
     For z = 0 To 100
     If x + y + z = 100 And 3 * x + 2 * y + 0.5 * z = 100 Then
     Print x, y, z
     End If
     Next z
     Next y
     Next x
     End Sub
     程序二(優(yōu)化)
     Private Sub Command1_Click()
     Dim x%, y%
     For x = 0 To 33
     For y = 0 To 50
     If 3 * x + 2 * y + 0.5 * (100 - x - y) = 100 Then
     Print x, y, 100 - x - y
     End If
     Next y
     Next x
     End Sub
    2) 高等數(shù)學
     求積分
     近似計算積分:s=∫13(x3+2x+5)dx
     代碼如下:
     Public Function f(ByVal x!) '被積函數(shù)
     f = x * (x * x + 2) + 5
     End Function
     Public Function trapez(ByVal a!, ByVal b!, ByVal n%) As Single
     'b、a分別為積分上下限,n為等分數(shù)
     Dim sum!, h!, x!
     h = (b - a) / n
     sum = (f(a) + f(b)) / 2
     For i = 1 To n - 1
     x = a + i * h
     sum = sum + f(x)
     Next i
     trapez = sum * h
     End Function
     調用:
     Private Sub Command1_Click()
     Print trapez(1, 3, 30)
     End Sub
     數(shù)論綜合題
     此類題目比較廣泛,必須給以足夠重視。
     歷年題目有:平方數(shù)、零巧數(shù)、擬互滿數(shù)、回文數(shù)、酉完數(shù)、完數(shù)、幸運數(shù)、逆序數(shù)以及無暇素數(shù)、超級素數(shù)、因子和等。