我國古代數學家張丘建在《算經》一書中提出的數學問題:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?
翻譯過來就是:
公雞5元一隻,母雞3元一隻,小雞1元3隻,100元買了100隻雞,問各多少隻?
下面利用PHP分三種方法來解決這個問題:
假設:
如果公雞1隻,母雞1隻,小雞1隻,則總價為:......,不對。
如果公雞1隻,母雞1隻,小雞2隻,則總價為:......,不對。
如果公雞1隻,母雞1隻,小雞3隻,則總價為:......,不對。
...........................
如果公雞1隻,母雞2隻,小雞1隻,則總價為:......,不對。
如果公雞1隻,母雞2隻,小雞2隻,則總價為:......,不對。
如果公雞1隻,母雞2隻,小雞3隻,則總價為:......,不對。
.............................
如果公雞100隻,母雞100隻,小雞100隻,則總價為:......,不對。
這種程式設計思想叫做「窮舉」,就是將所有可能的答案都羅列出來,然後挨個去驗證。
程式碼如下:
<?php $count = 0; for($gongji = 0;$gongji <= 100;$gongji++){ for ($muji=0; $muji <= 100; $muji++) { for ($xiaoji=0; $xiaoji <= 100 ; $xiaoji++) { if($gongji + $muji + $xiaoji ==100 && $gongji*5 + $muji*3 + $xiaoji / 3 == 100){ echo "<br>公雞:$gongji,母雞: $muji,小雞: $xiaoji"; } $count++; } } } echo "<br>".$count;
結果:
公雞:0,母雞: 25,小雞: 75公雞:4,母雞: 18,小雞: 78公雞:8,母雞: 11,小雞: 81公雞:12,母雞: 4,小雞: 841030301
程式碼如下
$count = 0; for($gongji = 0;$gongji <= 100 / 5;$gongji++){ for ($muji=0; $muji <= 100 / 3; $muji++) { $xiaoji = 100 - $gongji - $muji; if($gongji*5 + $muji*3 +$xiaoji / 3 == 100){ echo "<br>公雞:$gongji,母雞: $muji,小雞: $xiaoji"; } $count++; } } echo "<br>".$count;
結果:
公雞:0,母雞: 25,小雞: 75公雞:4,母雞: 18,小雞: 78公雞:8,母雞: 11,小雞: 81公雞:12,母雞: 4,小雞: 84714
程式碼如下
$count = 0; for($gongji = 0;$gongji <= 100 / 5;$gongji++){ for ($muji=0; $muji <= (100-$gongji*5) / 3; $muji++) { $xiaoji = 100 - $gongji - $muji; if($gongji*5 + $muji*3 +$xiaoji / 3 == 100){ echo "<br>公雞:$gongji,母雞: $muji,小雞: $xiaoji"; } $count++; } } echo "<br>".$count;
結果:
公雞:0,母雞: 25,小雞: 75公雞:4,母雞: 18,小雞: 78公雞:8,母雞: 11,小雞: 81公雞:12,母雞: 4,小雞: 84364
總結:
直接用三重for迴圈是很容易想到的,但是三重回圈的複雜度太大了,所以應該想到減少迴圈。直接把小雞用總的雞數減去公雞和母雞,就能減少一層迴圈,這樣就能減少執行的時間,提高程式碼效率。
以上就是PHP百錢百雞問題(三種解題思路及答案)的詳細內容,更多請關注TW511.COM其它相關文章!