趣味数学编程题解之怎样组合值最大

IT商界

  趣味数学中比较有魅力的地方还有数字游戏方面。这期就是一个游戏,而且非常有特点。

  怎样组合值最大

  将 5、6、7、8、9 填入下面的空格中, 使他们的积有最大值:□□□×□□

  题目分析

  题目虽然很简单,但直接找答案,还是有点难度。只有5、6、7、8、9五个数,往五个空里填,情况还不是很多,算一下,总计有5×4×3×2×1=120种情况,我们就从这120种情况中找出最大的一个值。

  我们把问题分成两大部分,一是如何填空,以使120种可能的情况全都填遍;第二是根据填好的空算出值来,并比较这数值的大小。

  为了便于找规律,还是用数组来完成该题目。设一数组orinum(1-5)来放五个数,用Maxnum(1-5)放每次比较中的最大的数。

  (1)历试所有方案

  有了orinum(1-5),只要在orinum(1)中放入5、6、7、8、9中任一个数;在orinum(2)中放入和orinum(1)不同的数;在orinum(3)中放入和orinum(1)、orinum(2)全都不同的数;其他orinum(3)和orinum(4)与上面放法类似。这样,题中的五个空就可用orinum(1)到orinum(5)来代表了。有了这五个数组,下面的表达式也就成了:

  (orinum(1)*100+orinum(2)*10+ orinum(3))*(orinum(4)*10+ orinum(5))

  后面要找最大值,实质上也就是找上式的最大值。

  (2)找出最大的数

  最大的值我们通过Maxnum(1-5)来放置。放的过程安排如下:

  方案中第一个orinum(1-5)所代表的值直接放入最大值Maxnum(1-5)中就行了,而从第2到第120个都遵循下面的原则,如果Maxnum(1-5)的值比orinum(1-5)大,则保留Maxnum(1-5)中的,否则,则用orinum(1-5)的值替换Maxnum(1-5)值。

  通过这样的程序,最终得到的就是最大值,我们只要将Maxnum(1-5)中的各值输出,结果也就一目了然了。

  语言、界面、源程序

  (1)语言

  程序中通过Virual BASIC6.0语言来实现。

  (2)界面

  界面非常简单,建立一标准EXE工程,其caption设为“怎样最大”,并加入两个命令按钮cmdsearch和cmdexit,caption改为“查找”和“退出”,一切OK。我们将代码加给cmdsearch_Click()即查找按钮的单击事件,将来运行时,我们只要用鼠标单击一下按钮,程序就执行了。

  (3)源程序

  Option Explicit

  Dim maxnum(1 To 5) As Long '最大值盛放数组

  Dim orinum(1 To 5) As Long '原始值数组

  Dim sum1, sum2 As Long

  Private Sub CmdExit_Click()

  '退出按钮

  Unload Me

  End Sub

  Private Sub CmdSearch_Click()

  '查找按钮

  Dim a1, a2, a3, a4, a5, i, n As Integer

  For i = 1 To 5 '初始化

  orinum(i) = 0

  maxnum(i) = 0

  Next i

  n = 0

  TxtList.Text = ""

  '历试120种方案

  For a1 = 5 To 9

  orinum(1) = a1

  For a2 = 5 To 9

  If a2 <> a1 Then

  orinum(2) = a2

  For a3 = 5 To 9

  If a3 <> a1 And a3 <> a2 Then

  orinum(3) = a3

  For a4 = 5 To 9

  If a4 <> a3 And a4 <> a2 And a4 <> a1 Then

  orinum(4) = a4

  For a5 = 5 To 9

  If a5 <> a4 And a5 <> a3 And a5 <> a2 And a5 <> a1 Then

  orinum(5) = a5

  n = n + 1 '计数

  If n=1 Then '第一个值直接放入maxnum数组

  For i = 1 To n

  maxnum(i) = orinum(i)

  Next i

  Else '2-120什比较

  sum1 = (maxnum(1) * 100 + maxnum(2)*10+maxnum(3))_

  *(maxnum(4)*10+maxnum(5  

  sum2 = (orinum(1) * 100 + orinum(2) * 10 + orinum(3))_

  * (orinum(4) * 10 + orinum(5))

  If sum1 < sum2 Then

  For i = 1 To 5

  maxnum(i) = orinum(i)

  Next i

  End If

  End If

  End If

  Next a5

  End If

  Next a4

  End If

  Next a3

  End If

  Next a2

  Next a1

  '输出最大值组合

  TxtList=TxtList.Text + vbCr + vbLf + Str(n)

  For i = 1 To 5

  TxtList.Text = TxtList.Text + Str(maxnum(i))

  Next i

  End Sub

  小 结

  由于数比较大,可能出现溢出错误。程序运行,结果是875*96的值。

  (1)程序中起到工具作用的是数组

  数组是非常有用的一种数据结构,正是由于数组的出现,使得我们的工作变得有规律,循环起来比较方便,对于数值运算尤其如此,后面的有些非数值运算也要用到。

  (2)有了数组,规律就容易找了

  用数组就像我们日常生活中的编号,学生有学号,医院要挂号,目的都是为了利用数值的特点以求得方便。有了这个数字,关于数字间的游戏就可以尽情地用了。