當我還是個不諳世事的小學生時,我練字、閱讀、學好數學,爭做五講四美、每門成績都是90+的優秀少先隊員。強者總是孤獨的,就在我以為我會在成績的山巔孤獨地度過小學生涯時,我遇上了一生之敵——雞兔同籠問題,也是這個比我太太太太爺爺活得都長的著名題型,讓我第一次懷疑我是不是不適合學數學。
即使後來,我學習了解方程式,雞兔同籠再也不能威脅到我,可我仍舊不理解小學數學老師講的「半足法」。讓雞立起1隻腳,讓兔子長出兩個頭,這個場景帶給我的不是解題思路,而是略帶滑稽的恐怖。
終於我決定再次揭開小學時的傷疤,潛心研究老祖宗傳下來的雞兔同籠解題方法。大家先跟著我,了解一下雞兔同籠的歷史溯源吧。
一、 《孫子算經》半足法解「雉兔同籠」
「雞兔同籠」問題最早記載於公元3、4世紀的《孫子算經》,其中的敘述為「今有雉兔同籠,上有三十五頭,下有九十四足。問雉兔各幾何」。「雉」是野雞的意思,這段話是說,籠子裡有雞和兔,一共有35個頭,有94隻腳,問雞和兔各有多少只。
《孫子算法》的解法就是我們常說的「半足法」,上置頭,下置足,半其足,以頭除足,以足除頭即得。」
總足數94取半成為47,此時相當於所有雞都成為了金雞獨立的「獨足雞」,所有兔都站立起來成為了「雙足兔」。此時每隻雞的頭數和足數都是1,每隻兔的頭數是1,足數是2,所以用47減去總頭數35就得到兔的只數是12。最後用總頭數35減去12就得到雞的只數。
二、 《算法統宗》倍頭法解「雞兔同籠」
「雞兔同籠」問題後來又收錄於明代程大位(1533-1606年)所著《算法統宗》第八卷的「少廣章」, 其中對問題的敘述把「雉」改為了「雞」,因此「雞兔同籠」的說法沿用至今。
《算法統宗》中對問題給出了兩種算法,第一種算法的過程是:
第一步:「置總頭倍之得七十」,意思是將總頭數35加倍,也就是乘2,得到70;第二步:「與總足內減七十餘二四」,也就是從總足數94中減去70得到24;第三步:「折半得一十二是兔」,將24折半(也就是24除以2),得到12,這就是兔的只數;第四步:「以四足乘之得四十八足」,用每隻兔的足數4乘12,得到兔的總足數48;第五步:「總足減之餘四十六足為雞足」,用總足數94減去兔的總數48得到46,就是雞的總足數;第六步:「折半得二十三」,將雞的總足數46折半(46除以2),就得到雞的只數為23。
另外一個算法是先求雞的只數,與前面先求兔只數的程序基本相同
書中對該算法的敘述為:「倍頭減足折半是兔」,「四頭減足折半是雞」。第一句話的意思是把求兔的只數的過程分為了倍頭、減足和折半三個步驟,「倍頭」就是把總頭數35加倍變成70;「減足」是用總頭數94減去70得到24;「減半」就是取24的一半得到兔子的只數為12。這個過程寫成如今的算式就是:
(94-35×2)÷2=12(只)
第二句話的意思是把求雞隻數的過程分為了四頭、減足和折半三個步驟,「四頭」就是用4乘總頭數35得到140;「減足」是用140減去總足數94得到46;與求兔只數的過程類似,「折半」就是取46的一半得到雞的只數23。寫成算式就是:
(35×4-94)÷2=23(只)
這種算法也被稱作「倍頭法」。
其實,如今再看這兩種算法,很輕易就理解了。只是對於絕大部分數學基礎尚且十分薄弱的小學生來說,他們很容易被這兩種解釋繞暈,陷在思維的迷霧中不知所措。
無論是《孫子算經》的半足法,還是《算法綜述》的倍頭法,都是「只敘術,不講理」。哪怕孩子們按照算法流程計算出了正確答案,也不一定明白其中的操作原理。由此我們也可以得出一個學習數學的啟示:想要學好數學,一定要對一類題型進行概念性理解,所謂萬變不離其宗,只有做到了解其本質原理,我們才有可能在面對各種衍生、變種題型中遊刃有餘。