趣味数学编程题解之乘车兜风算年龄

IT商界

  编程是为解决实际问题的,对题目中常识的理解不同,得到的结果就会不同。

  我们在上期的《朋友年龄》中得到了几组值,下面的题目又会是一种什么情况呢?同样是年龄问题,还有一个常识的问题,所谓常识,是指题目中没有明确提到,我们可当作条件来用。下面还是一个关于年龄的题目。

  年龄趣题:乘车兜风

  “你在忙什么,比尔?”教授随组地说。这时他的这位朋友正一口气喝完剩下的咖啡,站起来要走。

  “准备带三个女孩乘车游览!”比尔答道。

  教授笑了:“原来如此!敢问三位佳丽芳龄几许?”

  比尔思考片刻说:“把她们年龄乘在一起得到2450,可她们年龄和恰是您年龄的两倍。”

  教授摇了摇头说:“非常有趣,但对她们的年龄仍然有疑问。”

  比尔还在那里,他补充道:“是的,我忘了提起,我的年龄至少要比那个岁数最大的小一岁。”而这使得一切都变得清楚了!

  当然,教授是知道他朋友的年龄的,请问,你能算出她们的年龄吗?

  用电脑如何去算出她们的年龄呢?

  问题分析

  既然是三个女孩,她们的年龄应该不会超过25岁吧,或者开放一点,不超过30。所以有一个年龄的范围1~30岁。再就是教授的年龄,教授是一个人,我们想象他是地球上最大的人,那么最大也就120岁了。有了上面的两个范围,编程的一些具体问题就好解决了。

  为了算年龄,我们算几个人的呢,三个女孩的,比尔的年龄可以做为条件,可是我们不知道,只好用上面按常理来猜的两个条件了。

  程序实现

  在三个女孩的年龄范围内,从他们年龄的所有可能方案中自然就能找出那个可能的范围。这要用到三个年龄的循环。范围内怎样找出我们最需要的呢?通过上面所列的条件就可完成了,最重要的一个是她们年龄乘在一起得到2450,教授的年龄也可看做一个条件,但有了上面关于人的最大年龄的假设,这个条件还是不能忽略的,最大假设是30,三个人90岁,但三个人年龄和的两倍将达到180,这应该是不可能的,常识中最大的值是120岁。所以在题中用到的两个条件如下,必须两个条件全部符合时才是我们要的结果:

  ①a1 * a2 * a3 = 2450

  ②(a1 + a2 + a3) * 2 < 120

  为了使选择的方案不至重复,对循环可再加以限制,第二个的年龄的选择必须要大于等于第一个的年龄,第三个的年龄大于等于第二个。

  其N-S图如图1所示。

  语言、界面、源程序

  (1)语言

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

  (2)界面

  界面非常简单,建立一标准EXE工程,其caption设为“乘车兜风”,一切OK。我们将代码加给Form_Click()即窗体的单击事件,将来运行时,我们只要用鼠标单击一下窗体,程序就执行了。

  (3)源程序

  Option Explicit

  Private Sub Form_Click()

  Dim a1, a2, a3 As Integer

  For a1 = 1 To 30 '最小女孩年龄

  For a2 = a1 To 30 '中间女孩年龄

  For a3 = a2 To 30 '最大女孩年龄

  If a1 * a2 * a3 = 2450 and (a1 + a2 + a3) * 2 < 120 Then

  Print "三女孩年龄从大到小依次是:;"; a1; ","; a2; ","; a3

  Print "比尔的年龄大于"; a3

  End If

  Next a3

  Next a2

  Next a1

  End Sub

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

  编程小结

  程序一运行,一组数据,三个女孩的年龄分别是7,14,25。

  (1)只有一组结果的原因

  本题中比较难办的一点即是“什么是女孩?”,另一个容易忽略的问题是教授的年龄,教授是人,就不应该超过我们为人类设的年龄的最大限制120。概念不同引出的年龄范围是不一样的,范围太大,找出很多组数据,太小,没有合适的了,这同样是一个现实问题或者说常识。

  (2)为循环加上限制,减少循环次数。

  另一个问题是如何求出最大、中间和最小的年龄,我们可以先找出可能值然后再比较,那无疑会增大工作量。在循环的条件上做了一下手脚,这个问题就解决了。

  (3)常识作为隐藏的条件,编程时尤其要注意。

  题中有两个常识问题,即人的最大年龄<=120和“女孩”(也可看作常识吧)一词的出现,常识问题还是要知晓的。条件有时虽不在题中,可不能难倒我们,更不能因此而闹出笑话。

  (4)条件除了要找,还要学会创造与猜测,要在条件的综合过程中找出规律来。

  前面所讲的题目中的条件大都是在题中的,不论是多还是少,是确定还是不确定,是明显的还是隐蔽的,总之在题中是能找到的。但有时仅仅做到这一点还远远不够的。还要学会创造条件,要敢于猜测。后面将有这方面的事情发生。

  为了使我们暂时从条件的阴影中走出。下一期我们将看一个比较有意思的填空游戏,我们不再用单一的条件比较,而要在多个条件中总结和挖掘规律。