趣味数学编程题解之怎样组合值最大
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)有了数组,规律就容易找了
用数组就像我们日常生活中的编号,学生有学号,医院要挂号,目的都是为了利用数值的特点以求得方便。有了这个数字,关于数字间的游戏就可以尽情地用了。