有人在群里問雞兔同籠問題如何使用編程實現,我們這里先看看這個概念是什么。百度百科解釋如下:
雞兔同籠,是中國古代著名典型趣題之一,記載於《孫子算經》之中。雞兔同籠問題,是小學奧數的常見題型。許多小學算術應用題和填空題都可以轉化成這類問題,或者用解它的典型解法--"假設法"來求解。因此很有必要學會它的解法和思路。通常是假設法比較簡單易懂一點。
歷史
雞兔同籠是中國古代的數學名題之一。大約在1500年前,《孫子算經》中就記載了這個有趣的問題。書中是這樣敘述的:
-
今有雉兔同籠,上有三十五頭,下有九十四足,問雉兔各幾何?
這四句話的意思是:
-
有若干只雞兔同在一個籠子里,從上面數,有35個頭,從下面數,有94只腳。問籠中各有多少只雞和兔?
最簡單的方法實現如下:
<?php // 解法1 雙重循環雞兔 (這也是最基礎的循環解法) // 雞+兔=35 // 2*雞+4*兔=94 $total_head=35; for ($chicken=1; $chicken < $total_head; $chicken++) { for ($rabbit=1; $rabbit < $total_head; $rabbit++) { if(($rabbit+$chicken==$total_head) && (2*$chicken + 4*$rabbit==94)) { echo "chiken:{$chicken}---rabbit:{$rabbit}"; break 2; } } } ?>
這個是比較傻的用兩個變量來循環 循環之后還判斷兩個條件同時滿足,然后就結束循環。
稍微提升一點是下面這樣的做法
<?php // 解法2 循環雞的數量 算出兔子的數量 // 雞+兔=35 // 2*雞+4*兔=94 $total_head=35; for ($chicken=1; $chicken < $total_head; $chicken++) {
$rabbit=$total_head-$chicken; if(2*$chicken + 4*$rabbit==94) { echo "chiken:{$chicken}---rabbit:{$rabbit}"; break; } } ?>
或者是這樣的
<?php // 解法3 循環兔子的數量 計算雞的數量 通常情況下可以循環少一點(仔細想想這是為什么) // 雞+兔=35 // 2*雞+4*兔=94 $total_head=35; for ($rabbit=1; $rabbit < $total_head; $rabbit++) {
$chicken=$total_head-$rabbit; if(2*$chicken + 4*$rabbit==94) { echo "chiken:{$chicken}---rabbit:{$rabbit}"; break; } } ?>
使用一個變量取代着表示另外一個變量然后完成這個循環 就稍微簡單一點
下面的解法思路上稍微要繞個彎了
<?php // 解法4 砍足法 // 雞+兔=35 // 2*雞+4*兔=94 // 所有的動物砍掉兩條腿 那么 雞沒有腿 兔子少兩條腿 35個腦袋 應砍掉70條腿 // 剩余的94-70=24 都是兔子腿,則兔子24/2=12 雞 35-12=23 $total_head=35; $total_foot=94; $rabbit=($total_foot-2*$total_head)/2; $chicken=$total_head-$rabbit; echo "chicken:{$chicken}---rabbit:{$rabbit}"; ?>
或者是這樣
<?php // 解法5 增足法 // 雞+兔=35 // 2*雞+4*兔=94 // 所有的雞增加兩條腿 那么 雞兔都是四條腿了 35個腦袋 應該有 35*4=140條腿 // 多出來的腿都是雞的腿 多出來140-94=46,則雞有46/2=23 兔子 35-23=12 $total_head=35; $total_foot=94; $chicken=(4*$total_head-$total_foot)/2; $rabbit=$total_head-$chicken; echo "chicken:{$chicken}---rabbit:{$rabbit}"; ?>
其實應該還有其他的方法,歡迎留言和我探討。