數學手抄報內容:巧斷金鍊

一位來自阿肯色州的年輕太太格羅麗亞,正在加利福尼亞州旅行.她想在旅館租用一個房間,租期一周.辦事員此時正心緒不佳。辦事員:"房費每天20元,要付現錢.格羅麗亞:"很抱歉,先生,我沒帶現錢.但是我有一根金鍊,共7節,每節都值20元以上.辦事員:"好吧,把金鍊給我."格羅麗亞:"現在不能給你.我得請珠寶匠把金鍊割斷,每天給你一節,等到周末我有了現錢再把金鍊贖回.辦事員終於同意了,但格羅麗亞必須決定如何斷開金鍊的方法.格羅麗亞:"我該三思而行,因為珠寶匠是按照他所切割和以後重新連線的節數來索價的.格羅麗亞想了一下,悟到她不必把每一節都割斷,因為她可以把一段段金鍊換進換出,以這種方式來付房費.當她算出需要請珠寶匠割斷的節數時,她幾乎不能自信。你想一想需要割開多少節?

只需要割開一節。這一節應是從一端數起的第三節.把金鍊斷開成1節,2節,4節這樣三段後就能以換進換出的方式每天付給辦事員一節作為房費。

啊哈!領悟到下列兩點才能解題.第一,至少需要有1節,2節,4節這樣三段(即其節數成二重級數的一些段),這樣才能以各種不同的組合方式組成1節,2節,3節,4節,5節,6節和7節.我們在藥品混亂問題中已經知道,這就是作為二進制記數法基礎的冪級數.

第二,只需要割開一節就可以把金鍊分成符合要求的三段.關於這個問題,若把金鍊的長度增加,則可以想出一些新的問題.例如,假設格羅麗亞有一根63節的金鍊,她想把金鍊割開,以上面那種方式來付63天的房費(價格不變).要達到此種目的只需要割開三節.你想出來了嗎?你能否根據金鍊的不同長度設計一個通用的解題程式,要求分割開的節數為最少?

有一個有趣的變相問題:若所經手的n節首尾相連的閉合迴路,例如說格羅麗亞有一串金項鍊,由79節相連而成,若每天房費為一節,試問最少需要分割開幾節才能支付79天房費?

所有這些問題都跟二進制記數法有密切的關係.比如格羅麗亞的63節金項鍊如何分割?只要將63化成二進制表示:等於"111111"即63=1+2+4+8+16+32隻要將從第二節開始的兩節割開,再將從第八節開始的八節割下來,和從第32節開始的32節割下來即可,這樣就有了從1,2,3,4,5,6,直到63的所有節數.一般地,若有n節金鍊,n是形如2k-1類型的數,將n化成二進制表示,再將所有"1"的位置所代表的2的冪的數相間隔地割開即可達到目的.但是對於其他任意類型的數,卻不能奏效,比如對於格羅麗亞的79節金項鍊,79的二進制記數法表示為"1001111".即79=1+2+4+8+0+0+64,這樣從1到15都能表示,可是從16到63都沒法表示,我把這個問題做到這裡,也一時糊塗起來,但這個問題畢竟不是很複雜,咱們也學一學閔科夫斯基在課堂上口出狂言要解決四色問題的勁頭,摸索著來解決一把.咱們可以這樣:你不是要求節數最少嗎?假設n=a+b其中a是已經找到的最大的那一節數,b是比n小的已經解決了的金鍊問題,由於b已經解決,因此b的拆分能夠表示從1,2,3,...b-1,b的所有金鍊節數,而再大一些的數就不能夠表示了,比如b+1,所以必須要a參加進來,如果n是奇數,可令a=b+1,這樣n=2b+1,所以b=(n-1)/2,a=(n+1)/2,這樣就找到了最大的一節的節數a,然後對b=(n-1)/2繼續套用如上的辦法,即可解決問題.如果n是偶數,可令a=b,這樣雖然a本身不能表示出b+1,但是可以從b的拆分中拿出一個1來(這個1是必須存在的,因為要表示從1,2,3,...b-1,b的所有數)與a組成a+1也就是b+1.所以n=a+b=2a=2b,a=b=n/2.這樣也找到了n為偶數時最大的一節金鍊的節數.對於b繼續如上的過程,就可以找到全部應該斷開的金鍊節數,我算出了從1到15的所有拆分如下:

1=1

2=1+1

3=1+2

4=1+1+2

5=1+1+3

6=1+2+3

7=1+2+4