1、算法說明
1) 初等數(shù)學(xué)
遞推法
又稱為“迭代法”,其基本思想是把一個復(fù)雜的計算過程轉(zhuǎn)化為簡單過程的多次重復(fù)。每次重復(fù)都在舊值的基礎(chǔ)上遞推出新值,并由新值代替舊值。
問題:猴子吃桃子
小猴子有若干桃子,第一天吃掉一半多一個;第二天吃掉剩下的一半多一個…..;如此,到第七天早上要吃時,只剩下一個桃子。問小猴子一開始共有多少桃子?
分析:可以最后一天桃子數(shù)推出倒數(shù)第二天的桃子數(shù);再從倒數(shù)第二天推出倒數(shù)第三天桃子數(shù)………..
設(shè)第n天桃子數(shù)為xn,前一天桃子數(shù)是:xn-1,則有關(guān)系:
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元?,F(xiàn)在有100元,要求買100只雞,編程列出所有可能的購雞方案。
分析:
設(shè)母雞、公雞、小雞分別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ù)學(xué)
求積分
近似計算積分: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
調(diào)用:
Private Sub Command1_Click()
Print trapez(1, 3, 30)
End Sub
數(shù)論綜合題
此類題目比較廣泛,必須給以足夠重視。
歷年題目有:平方數(shù)、零巧數(shù)、擬互滿數(shù)、回文數(shù)、酉完數(shù)、完數(shù)、幸運數(shù)、逆序數(shù)以及無暇素數(shù)、超級素數(shù)、因子和等。
2、實戰(zhàn)練習(xí)
1) 補充代碼(2002秋二(10))
找出由兩個不同數(shù)字組成的平方數(shù),并將結(jié)果按圖中的格式顯示在列表框 List1中。
Option Explicit
Private Sub Command1_Click()
Dim I As Long, N As Long
For I = 11 To 300
(1)
If Verify(N) Then
(2)
End If
Next I
End Sub
Private Function Verify( (3) ) As Boolean
Dim A(0 To 9) As Integer, I As Integer, Js As Integer
Do While N <> 0
(4)
N = N \ 10
Loop
For I = 0 To 9
Js = Js + A(I)
Next I
(5)
End Function
1) 編程題(2004秋上機試卷08)
一個正整數(shù)被稱為奇妙平方數(shù),如果此數(shù)的平方與它的逆序數(shù)的平方互為逆序數(shù)。例如,
12^2=144, 21^2=441,12 與 21 互逆 ,144 與 441 互逆 ,12 就是奇妙平方數(shù)。找出 1-300 以內(nèi)所有的奇妙平方數(shù)。
1) 初等數(shù)學(xué)
遞推法
又稱為“迭代法”,其基本思想是把一個復(fù)雜的計算過程轉(zhuǎn)化為簡單過程的多次重復(fù)。每次重復(fù)都在舊值的基礎(chǔ)上遞推出新值,并由新值代替舊值。
問題:猴子吃桃子
小猴子有若干桃子,第一天吃掉一半多一個;第二天吃掉剩下的一半多一個…..;如此,到第七天早上要吃時,只剩下一個桃子。問小猴子一開始共有多少桃子?
分析:可以最后一天桃子數(shù)推出倒數(shù)第二天的桃子數(shù);再從倒數(shù)第二天推出倒數(shù)第三天桃子數(shù)………..
設(shè)第n天桃子數(shù)為xn,前一天桃子數(shù)是:xn-1,則有關(guān)系:
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元?,F(xiàn)在有100元,要求買100只雞,編程列出所有可能的購雞方案。
分析:
設(shè)母雞、公雞、小雞分別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ù)學(xué)
求積分
近似計算積分: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
調(diào)用:
Private Sub Command1_Click()
Print trapez(1, 3, 30)
End Sub
數(shù)論綜合題
此類題目比較廣泛,必須給以足夠重視。
歷年題目有:平方數(shù)、零巧數(shù)、擬互滿數(shù)、回文數(shù)、酉完數(shù)、完數(shù)、幸運數(shù)、逆序數(shù)以及無暇素數(shù)、超級素數(shù)、因子和等。
2、實戰(zhàn)練習(xí)
1) 補充代碼(2002秋二(10))
找出由兩個不同數(shù)字組成的平方數(shù),并將結(jié)果按圖中的格式顯示在列表框 List1中。
Option Explicit
Private Sub Command1_Click()
Dim I As Long, N As Long
For I = 11 To 300
(1)
If Verify(N) Then
(2)
End If
Next I
End Sub
Private Function Verify( (3) ) As Boolean
Dim A(0 To 9) As Integer, I As Integer, Js As Integer
Do While N <> 0
(4)
N = N \ 10
Loop
For I = 0 To 9
Js = Js + A(I)
Next I
(5)
End Function
1) 編程題(2004秋上機試卷08)
一個正整數(shù)被稱為奇妙平方數(shù),如果此數(shù)的平方與它的逆序數(shù)的平方互為逆序數(shù)。例如,
12^2=144, 21^2=441,12 與 21 互逆 ,144 與 441 互逆 ,12 就是奇妙平方數(shù)。找出 1-300 以內(nèi)所有的奇妙平方數(shù)。

