首頁 >後端開發 >php教程 >PHP百錢百雞問題(三種解題想法及答案)

PHP百錢百雞問題(三種解題想法及答案)

**熬夜选手
**熬夜选手原創
2020-04-30 13:20:1012271瀏覽

什麼是百錢百雞?

我國古代數學家張丘建在《算經》一書中提出的數學問題:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?

PHP百錢百雞問題(三種解題想法及答案)

翻譯過來就是:

公雞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百錢百雞問題(三種解題想法及答案)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn