编程小博士(17)
软件世界
学会创造条件
问:上次小博士让我对三个数字进行排序,我便使用了分支语句来排,但排着排着问题就出来了,感觉必须要创造条件,不知道这方面有有什么窍门吗?”
小博士:你用分支语句来做这个例子是可以完成的。而要用好分支语句,就要创造好条件和梳理好条件,这就是诀窍了。我们就用三个数字排序的例子来讲讲。
我们先来看看用分支语句解决a、b、c排序问题的程序:
Private Sub CmdExit_Click() '退出
Unload Me
End Sub
Private Sub CmdSort_Click() '排序
' 输入
a = Val(TxtA.Text)
b = Val(TxtB.Text)
c = Val(TxtC.Text)
'比较
If a > b Then
If c > a Then
TxtList.Text = Str(c) + "," + Str(a) + "," + Str(b)
Else
If c > b Then
TxtList.Text = Str(a) + "," + Str(c) + "," + Str(b)
Else
TxtList.Text = Str(a) + "," + Str(b) + "," + Str(c)
End If
End If
Else
If c > b Then
TxtList.Text = Str(c) + "," + Str(b) + "," + Str(a)
Else
If c > a Then
TxtList.Text = Str(b) + "," + Str(c) + "," + Str(a)
Else
TxtList.Text = Str(b) + "," + Str(a) + "," + Str(c)
End If
End If
End If
'输出
End Sub
(以上程序在Win2000、VB6.0下调试通过。)
上面这个问题,通过排列组合的知识可知,可能有六种情况出现,abc、acb、cab、cba、bac和bca中的一种,我们要用单分支来解决,须先将六种分成两大类。
用一个数轴来表示,现在情况分成了如下两种(如图):
第1种情况又可分成三种,正是c放在a、b上的三个位置(如图中的(1)),再将它合并成两种:c>a作为一类,其他的作为另一类;另一类又可以c>b作为依据分成两类。
第2种情况也如法炮制。
从上面的分析中不难看出,首先分成两大类,每类包含三种情况;分出的每一个类又可分成两大类,一个为一种,一个为两种;第三步还要将两种合并的情况再分开,到此,六种方案全部解决。
思考
条件多了并不可怕,关键是根据条件的特点,正确用分支结构。但是解决上述这么简单的问题我们需要比较复杂的思路吗?其实还有更简单的方法,大家可以继续思考一下。
