江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
VB常用算法(九)数学应用-

VB常用算法(九)数学应用- -

曹苏群  http://caosuqun.bokee.com

Tag数学应用    算法                                          

1、算法说明

1)        初等数学

         递推法

又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都在旧值的基础上递推出新值,并由新值代替旧值。

问题:猴子吃桃子

小猴子有若干桃子,第一天吃掉一半多一个;第二天吃掉剩下的一半多一个…..;如此,到第七天早上要吃时,只剩下一个桃子。问小猴子一开始共有多少桃子?

分析:可以最后一天桃子数推出倒数第二天的桃子数;再从倒数第二天推出倒数第三天桃子数………..

设第n天桃子数为xn,前一天桃子数是:xn1则有关系:

xnxn1/2-1

         程序如下:

Private Sub Command1_Click()

   Dim n%, i%

   x = 1   '第七天桃子数

   Print "第七天桃子数: 1"

   For i = 6 To 1 Step -1

        x = (x + 1) * 2

        Print "" & i & "天桃子数:" & x & ""

   Next i

End Sub

 

         穷举法

又称枚举法,即将所有可能情况一一测试,判断是否满足条件,一般用循环实现。

问题:百元买鸡问题。

假定小鸡每只5角;公鸡每只2元;母鸡每只3元。现在有100元,要求买100只鸡,编程列出所有可能的购鸡方案。

分析:

设母鸡、公鸡、小鸡分别xyz只,则有:

xyz100

3x2y0.5z100

         程序一:

                  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

 

 

         程序二(优化)

                  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)        高等数学

         求积分

        近似计算积分:s=13(x3+2x+5)dx

 

         代码如下:

             Public Function f(ByVal x!) '被积函数

             f = x * (x * x + 2) + 5

             End Function

 

             Public Function trapez(ByVal a!, ByVal b!, ByVal n%) As Single

                      'ba分别为积分上下限,n为等分数

                   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

 

         数论综合题

         此类题目比较广泛,必须给以足够重视。

         历年题目有:平方数、零巧数、拟互满数、回文数、酉完数、完数、幸运数、逆序数以及无暇素数、超级素数、因子和等。

        

2、实战练习

1)        补充代码(2002秋二(10))

         找出由两个不同数字组成的平方数,并将结果按图中的格式显示在列表框 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

         一个正整数被称为奇妙平方数,如果此数的平方与它的逆序数的平方互为逆序数。例如,

         12^2=144, 21^2=441,12 21 互逆 ,144 441 互逆 ,12 就是奇妙平方数。找出 1-300 以内所有的奇妙平方数。