会计考友 发表于 2012-7-31 22:15:04

计算机等级考试二级VB常用算法(9):排序

   1、算法说明
1)      初等数学
         递推法
又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都在旧值的基础上递推出新值,并由新值代替旧值。
问题:猴子吃桃子
小猴子有若干桃子,第一天吃掉一半多一个;第二天吃掉剩下的一半多一个…..;如此,到第七天早上要吃时,只剩下一个桃子。问小猴子一开始共有多少桃子?
分析:可以最后一天桃子数推出倒数第二天的桃子数;再从倒数第二天推出倒数第三天桃子数………..
设第n天桃子数为xn,前一天桃子数是:xn-1,则有关系:
xn=xn-1/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只鸡,编程列出所有可能的购鸡方案。
分析:
设母鸡、公鸡、小鸡分别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
         程序二(优化)
                  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
                      'b、a分别为积分上下限,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
         数论综合题
         此类题目比较广泛,必须给以足够重视。
         历年题目有:平方数、零巧数、拟互满数、回文数、酉完数、完数、幸运数、逆序数以及无暇素数、超级素数、因子和等。

会计考友 发表于 2012-7-31 22:15:05

计算机等级考试二级VB常用算法(9):排序

</p>  2、实战练习
1)      补充代码(2002秋二(10))
         找出由两个不同数字组成的平方数,并将结果按图中的格式显示在列表框 List1中。

http://www.examw.com/NCRE/Files/2010-6/3/1138403753.jpg

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 N0
                              (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 以内所有的奇妙平方数。
http://www.examw.com/NCRE/Files/2010-6/3/1138401165.jpg
页: [1]
查看完整版本: 计算机等级考试二级VB常用算法(9):排序