2018年10月10日 星期三

12個經典的行程問題

    無論是小學奧數,還是公務員考試,還是公司的筆試面試題,似乎都少不了行程問題——題目門檻低,人人都能看懂;但思路奇巧,的確會難住不少人。平時看書上網與人聊天和最近與小學奧數打交道的過程中,我收集到很多簡單有趣而又頗具啟發性的行程問題,在這裡整理成一篇文章,和大家一同分享。這些題目都已經非常經典了,絕大多數可能大家都見過;希望這裡能有至少一個你沒見過的題目,也歡迎大家來信提供更多類似的問題。
    讓我們先從一些最經典最經典的問題說起吧。選中空白部分顯示答案。
    甲、乙兩人分別從相距100 米的A 、B 兩地出發,相向而行,其中甲的速度是2 米每秒,乙的速度是3 米每秒。一隻狗從A 地出發,先以6 米每秒的速度奔向乙,碰到乙後再掉頭沖向甲,碰到甲之後再跑向乙,如此反复,直到甲、乙兩人相遇。問在此過程中狗一共跑了多少米?
    這可以說是最經典的行程問題了。不用分析小狗具體跑過哪些路程,只需要注意到甲、乙兩人從出發到相遇需要20秒,在這20秒的時間裡小狗一直在跑,因此它跑過的路程就是120米。
    說到這個經典問題,故事可就多了。下面引用某個經典的數學家八卦帖子: John von Neumann曾被問起一個中國小學生都很熟的問題:兩個人相向而行,中間一隻狗跑來跑去,問兩個人相遇後狗走了多少路。訣竅無非是先求出相遇的時間再乘以狗的速度。Neumann當然瞬間給出了答案。提問的人失望地說你以前一定聽說過這個訣竅吧。Neumann驚訝道:“什麼訣竅?我就是把狗每次跑的都算出來,然後計算無窮級數⋯⋯”
    某人上午八點從山腳出發,沿山路步行上山,晚上八點到達山頂。不過,他並不是勻速前進的,有時慢,有時快,有時甚至會停下來。第二天,他早晨八點從山頂出發,沿著原路下山,途中也是有時快有時慢,最終在晚上八點到達山腳。試著說明:此人一定在這兩天的某個相同的時刻經過了山路上的同一個點。
    這個題目也是經典中的經典了。把這個人兩天的行程重疊到一天去,換句話說想像有一個人從山腳走到了山頂,同一天還有另一個人從山頂走到了山腳。這兩個人一定會在途中的某個地點相遇。這就說明了,這個人在兩天的同一時刻都經過了這裡。
      
    甲從A 地前往B 地,乙從B 地前往A 地,兩人同時出發,各自勻速地前進,每個人到達目的地後都立即以原速度返回。兩人首次在距離A 地700 米處相遇,後來又在距離B 地400 米處相遇。求A 、 B 兩地間的距離。
    答案: 1700 米。第一次相遇時,甲、乙共同走完一個AB 的距離;第二次相遇時,甲、乙共同走完三個AB 的距離。可見,從第一次相遇到第二次相遇的過程花了兩個從出發到第一次相遇這麼多的時間。既然第一次相遇時甲走了700 米,說明後來甲又走了1400 米,因此甲一共走了2100 米。從中減去400 米,正好就是A 、 B 之間的距離了。
    甲、乙、丙三人百米賽跑,每次都是甲勝乙10 米,乙勝丙10 米。則甲勝丙多少米?
    答案是19 米。“乙勝丙10 米”的意思就是,等乙到了終點處時,丙只到了90 米處。“甲勝乙10 米”的意思就是,甲到了終點處時,乙只到了90 米處,而此時丙應該還在81 米處。所以甲勝了丙19 米。
    哥哥弟弟百米賽跑,哥哥贏了弟弟1 米。第二次,哥哥在起跑線處退後1 米與弟弟比賽,那麼誰會獲勝?
    答案是,哥哥還是獲勝了。哥哥跑100 米需要的時間等於弟弟跑99 米需要的時間。第二次,哥哥在-1 米處起跑,弟弟在0 米處起跑,兩人將在第99 米處追平。在剩下的1 米里,哥哥超過了弟弟並獲得勝利。
    如果你上山的速度是2 米每秒,下山的速度是6 米每秒(假設上山和下山走的是同一條山路)。那麼,你全程的平均速度是多少?
    這是小學行程問題中最容易錯的題之一,是小孩子們死活也搞不明白的問題。答案不是4米每秒,而是3米每秒。不妨假設全程是S米,那麼上山的時間就是S/2 ,下山的時間就是S/6 ,往返的總路程為2S ,往返的總時間為S/2 + S/6 ,因而全程的平均速度為2S / (S/2 + S/6) = 3 。
    其實,我們很容易看出,如果前一半路程的速度為a ,後一半路程的速度為b ,那麼總的平均速度應該小於(a + b) / 2 。這是因為,你會把更多的時間花在速度慢的那一半路程上,從而把平均速度拖慢了。事實上,總的平均速度應該是a和b的調和平均數,即2 / (1/a + 1/b) ,很容易證明調和平均數總是小於等於算術平均數的。
    接下來的兩個問題與流水行船有關。假設順水時實際船速等於靜水中的船速加上水流速度,逆水時實際船速等於靜水中的船速減去水流速度。
    船在靜水中往返A 、 B 兩地和在流水中往返A 、 B 兩地相比,哪種情況下更快?
    這是一個經典問題了。答案是,船在靜水中更快一些。注意船在順水中的實際速度與在逆水中的實際速度的平均值就是它的靜水速度,但由前一個問題的結論,實際的總平均速度會小於這個平均值。因此,船在流水中往返需要的總時間更久。
    考慮一種極端情況可以讓問題的答案變得異常顯然,頗有一種荒謬的喜劇效果。假設船剛開始在上游。如果水速等於船速的話,它將以原速度的兩倍飛速到達折返點。但它永遠也回不來了⋯⋯
    船在流水中逆水前進,途中一個救生圈不小心掉入水中,一小時後船員才發現並調頭追趕。則追上救生圈所需的時間會大於一個小時,還是小於一個小時,還是等於一個小時?
    這也是一個經典問題了。中學物理競賽中曾出現過此題,《編程之美》上也有一個完全相同的問題。答案是等於一個小時。原因很簡單:反正船和救生圈都被加上了一個水流的速度,我們就可以直接拋開流水的影響不看了。換句話說,我們若以流水為參照系,一切就都如同沒有流水了。我們直接可以想像船在靜水噹中丟掉了一個救生圈並繼續前行一個小時,回去撿救生圈當然也還需要一個小時。
    每當有人還是沒想通時,我很願意舉這麼一個例子。假如有一列勻速疾馳的火車,你在火車車廂裡,從車頭往車尾方向步行。途中你掉了一個錢包,但繼續往前走了一分鐘後才發現。顯然,你回去撿錢包需要的時間也是一分鐘。但是,錢包不是正被火車載著自動地往遠方走嗎?其實,既然你們都在火車上,自然就可以無視火車的速度了。前面的救生圈問題也是一樣的道理。
    下面這個問題也很類似:假設人在傳送帶上的實際行走速度等於人在平地上的行走速度加上一個傳送帶的速度。
    你需要從機場的一號航站樓走到二號航站樓。路途分為兩段,一段是平地,一段是自動傳送帶。假設你的步行速度是一定的,因而在傳送帶上步行的實際速度就是你在平地上的速度加上傳送帶的速度。如果在整個過程中,你必須花兩秒鐘的時間停下來做一件事情(比如蹲下來系鞋帶),那麼為了更快到達目的地,你應該把這兩秒鐘的時間花在哪裡更好?
    這個漂亮的問題出自Terence Tao 的Blog (http://terrytao.wordpress.com/2008/12/09/an-airport-inspired-puzzle)。很多人可能會認為,兩種方案是一樣的吧?然而,真正的答案卻是,把這兩秒花在傳送帶上會更快一些。這是因為,傳送帶能給你提供一些額外的速度,因而你會希望在傳送帶上停留更久的時間,更充分地利用傳送帶的好處。因此,如果你必須停下來一會兒的話,你應該在傳送帶上多停一會兒。
    假設你站在甲、乙兩地之間的某個位置,想乘坐出租車到乙地去。你看見一輛空車遠遠地從甲地駛來,而此時整條路上並沒有別人與你爭搶空車。我們假定車的行駛速度和人的步行速度都是固定不變的,並且車速大於人速。為了更快地到達目的地,你應該迎著車走過去,還是順著車的方嚮往前走一點?
    这是我在打车时想到的一个问题。我喜欢在各种人多的场合下提出这个问题,此时大家的观点往往会立即分为鲜明的两派,并且各有各的道理。有人说,由于车速大于人速,我应该尽可能早地上车,充分利用汽车的速度优势,因此应该迎着空车走上去,提前与车相遇嘛。另一派人则说,为了尽早到达目的地,我应该充分利用时间,马不停蹄地赶往目的地。因此,我应该自己先朝目的地走一段路,再让出租车载我走完剩下的路程。
    其实答案出人意料的简单,两种方案花费的时间显然是一样的。只要站在出租车的角度上想一想,问题就变得很显然了:不管人在哪儿上车,出租车反正都要驶完甲地到乙地的全部路程,因此你到达乙地的时间总等于出租车驶完全程的时间,加上途中接人上车可能耽误的时间。从省事儿的角度来讲,站在原地不动是最好的方案!
    我曾经把这个有趣的问题搬上了《新知客》杂志 2010 年第 9 期的趣题专栏(http://www.matrix67.com/blog/archives/3677)。不少人都找到了这个题的一个 bug :在某些极端情况下,顺着车的方向往前走可能会更好一些,因为你或许会直接走到终点,而此时出租车根本还没追上你!
    某工厂每天早晨都派小车按时接总工程师上班。有一天,总工程师为了早些到工厂,比平日提前一小时出发步行去工厂。走了一段时间后,遇到来接他的小车才上车继续前进。进入工厂大门后,他发现只比平时早到 10 分钟。总工程师在路上步行了多长时间才遇到来接他的汽车?设人和汽车都做匀速直线运动。
    据说,这是一道初中物理竞赛题(初中物理有“运动”一章)。答案是 55 分钟。首先,让我们站在车的角度去想(正如前一题那样)。车从工厂出发,到半途中就遇上了总工程师并掉头往回走,结果只比原来早到 10 分钟。这说明,它比原来少走了 10 分钟的车程,这也就是从相遇点到总工程师家再到相遇点的路程。这就说明,从相遇点到总工程师家需要 5 分钟车程。
    现在,让我们把视角重新放回总工程师那里。让我们假设总工程师遇上了来接他的车并坐上去之后,并没有下令汽车立即掉头,而是让车像平日那样继续开到他家再返回工厂,那么他到工厂的时间应该和原来一样。这说明,他提前出发的那一个小时完全浪费了。这一个小时浪费在哪儿了呢?浪费在了他步行到相遇点的过程,以及乘车又回到家的过程。既然乘车又回到家需要 5 分钟,因此步行的时间就是 55 分钟了。
    有一位隐居在深山老林的哲学家。一天,他忘记给家里唯一的时钟上发条了。由于他家里没有电话、电视、网络、收音机等任何能获知时间的设备,因此他彻底不知道现在的时间是多少了。于是,他徒步来到了他朋友家里坐了一会儿,然后又徒步回到自己家中。此时,他便知道了应该怎样重新设定自己的时钟。他是怎么做的?
    很多人的第一想法或许是观察日出日落。在此,我们也假设通过太阳位置判断时间是不可靠的。 Update: 不少网友找到了此题的一个 bug 。在此我们假设,时钟是固定在墙上的,或者由于太重,无法直接带走。
    传统意义上说,这个问题不算行程问题。不过,在写这篇文章时,这个问题立即跳入我的脑海,我也就把它放进来了。
    答案:别忘了,他家里的时钟并不是不走了,只是不准了而已。因此,他可以借助自己家里的时钟,判断他此次出行一共花了多久。假设往返所花时间一样,再结合在朋友那儿看到的正确时间,他便能算出应该怎样调整自己的时钟了。

还有几个不太相关的经典问题这里没有提到,不过你或许会感兴趣:
汽车穿越沙漠问题:http://en.wikipedia.org/wiki/Jeep_problem
木杆上的蚂蚁:http://www.matrix67.com/blog/archives/3791 计算题1

沒有留言:

張貼留言