雞兔同籠問題


有人在群里問雞兔同籠問題如何使用編程實現,我們這里先看看這個概念是什么。百度百科解釋如下:

雞兔同籠,是中國古代著名典型趣題之一,記載於《孫子算經》之中。雞兔同籠問題,是小學奧數的常見題型。許多小學算術應用題和填空題都可以轉化成這類問題,或者用解它的典型解法--"假設法"來求解。因此很有必要學會它的解法和思路。通常是假設法比較簡單易懂一點。

歷史

雞兔同籠是中國古代的數學名題之一。大約在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}";
?>

其實應該還有其他的方法,歡迎留言和我探討。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM