编程小博士(15)

软件世界

  一题多解的探讨

  问:有时一个问题的解决办法也许不只一种,那怎样进行一题多解呢?这样做有什么好处吗?

  小博士:对程序输入、处理和输出三部分功能中输出部分的定位不同,就可能导致处理过程不一样。通过多种方法的探讨,不仅能开拓我们编程的思路,对于我们在处理复杂问题时更可以不再局限于一种思路。下面来看看这个实例。

  示例:有两个数a和b,按从大到小排序

  有两个数a和b,然后对它们进行排序。结果很明显只有两种可能,a、b或b、a,我们怎样对待这个问题编程呢?

  第一种解法:

  Private Sub Command

  1_Click() '方法1

  ' 输入

  a = Val(Txta.Text) '通过文本框实现a、b输入

  b = Val(Txtb.Text)

  '比较兼输出

  If a > b Then

  TxtList.Text = Str(a) + "," + Str(b)

  Else

  TxtList.Text = Str(b) + "," + Str(a)

  End If

  End Sub

  说明:这种方法便是强制输出结果。输入a、b中的数值可能有两种情况,而输出的只有一种a>b,这种强制输出,也就决定了在处理过程中我们需按两种情况来进行处理,符合a>b的,不用处理就可输出,而如果不符合a>b,则要将a和b两数的值交换。

  第二种解法:

  Private Sub Command

  2_Click() '方法2

  ' 输入

  a = Val(Txta.Text)

  b = Val(Txtb.Text)

  '比较

  If a > b Then

  Else

  c = a

  a = b

  b = c

  End If

  '输出

  TxtList.Text = Str(a) + "," + Str(b)

  End Sub

  (以上程序在Win2000 VB6.0下调试通过)

  说明:交换两数值的程序在前面我们介绍过,只要再引入第3个变量c,通过三步即可实现。

  思考

  问题通过两种办法成功解决。从表面上看,前一种比后一种简洁一些。但如果按照这种思路,在解三个数及更多个数排序的复杂问题时,哪种方法更简单呢?