程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP經典題:百錢百雞問題(窮舉算法)

PHP經典題:百錢百雞問題(窮舉算法)

編輯:關於PHP編程

PHP經典題:百錢百雞問題(窮舉算法)


百錢百雞問題: 已知:公雞5元一只,母雞3元一只,小雞一元3只 現用100元錢買了100只雞,問:公雞母雞小雞各幾只? --請考慮盡可能高效的方法   思路: 如果有0只公雞,0只母雞,1只小雞,數量是100嗎?價錢是100嗎? 否 如果有0只公雞,0只母雞,2只小雞,數量是100嗎?價錢是100嗎? 否 如果有0只公雞,0只母雞,3只小雞,數量是100嗎?價錢是100嗎? 否 ...... 如果有0只公雞,0只母雞,100只小雞,數量是100嗎?價錢是100嗎? 否 如果有0只公雞,1只母雞,1只小雞,數量是100嗎?價錢是100嗎? 否 如果有0只公雞,1只母雞,2只小雞,數量是100嗎?價錢是100嗎? 否 ...... 如果有0只公雞,1只母雞,100只小雞,數量是100嗎?價錢是100嗎? 否 如果有0只公雞,2只母雞,1只小雞,數量是100嗎?價錢是100嗎? 否 ...... 如果有100只公雞,100只母雞,0只小雞,數量是100嗎?價錢是100嗎? 否 如果有100只公雞,100只母雞,1只小雞,數量是100嗎?價錢是100嗎? 否 如果有100只公雞,100只母雞,2只小雞,數量是100嗎?價錢是100嗎? 否 ...... 這就叫做:窮舉思想 (就是將所以可能的情況挨個去測試)   PHP代碼:   echo "<p>原始思路:</p>"; $count = 0; for($gongji = 0; $gongji <= 100; ++$gongji) { for($muji = 0; $muji <= 100; ++$muji) { for($xiaoji = 0; $xiaoji <= 100; ++$xiaoji) { if($gongji*5 + $muji*3 + $xiaoji/3 == 100 && $gongji + $muji + $xiaoji == 100) { echo "<br />公雞有 $gongji 只;母雞有 $muji 只;小雞有 $xiaoji 只;"; } $count++; //計算次數 } } } echo "<br />次數:$count"; echo '<br />'; echo "<p>代碼優化一:</p>";   $count = 0; for($gongji = 0; $gongji <= 100; ++$gongji) { for($muji = 0; $muji <= 100; ++$muji) { $xiaoji = 100 - $gongji - $muji; if($gongji*5 + $muji*3 + $xiaoji/3 == 100) { echo "<br />公雞有 $gongji 只;母雞有 $muji 只;小雞有 $xiaoji 只;"; } $count++; //計算次數 } } echo "<br />次數:$count";   echo '<br />'; echo "<p>代碼優化二:</p>";   $count = 0; for($gongji = 0; $gongji <= 100/5; ++$gongji) { //根據總價:則公雞最多有100/5只 for($muji = 0; $muji <= 100/3; ++$muji) { //根據總價:則母雞最多有100/3只 $xiaoji = 100 - $gongji - $muji; if($gongji*5 + $muji*3 + $xiaoji/3 == 100) { echo "<br />公雞有 $gongji 只;母雞有 $muji 只;小雞有 $xiaoji 只;"; } $count++; //計算次數 } } echo "<br />次數:$count";     echo '<br />'; echo "<p>代碼優化三:</p>";   $count = 0; for($gongji = 0; $gongji <= 100/5; ++$gongji) { //根據總價:則公雞最多有100/5只 for($muji = 0; $muji <= (100-$gongji*5)/3; ++$muji) { //根據總價與公雞所花的錢:則母雞最多有(100-$gongji*5)/3只 $xiaoji = 100 - $gongji - $muji; if($gongji*5 + $muji*3 + $xiaoji/3 == 100) { echo "<br />公雞有 $gongji 只;母雞有 $muji 只;小雞有 $xiaoji 只;"; } $count++; //計算次數 } } echo "<br />次數:$count";     echo '<br />'; echo "<p>代碼優化四:</p>";   $count = 0; for($gongji = 0; $gongji <= 100/5; ++$gongji) { //根據總價:則公雞最多有100/5只 for($muji = 0; $muji <= (100-$gongji*5)/3; ++$muji) { //根據總價與公雞所花的錢:則母雞最多有(100-$gongji*5)/3只 $xiaoji = 100 - $gongji - $muji; if($xiaoji % 3 != 0) {continue;} //考慮小雞的價錢,則小雞的數量只能被3整除才合理 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 只;小雞有 84 只; 次數:1030301 代碼優化一:   公雞有 0 只;母雞有 25 只;小雞有 75 只; 公雞有 4 只;母雞有 18 只;小雞有 78 只; 公雞有 8 只;母雞有 11 只;小雞有 81 只; 公雞有 12 只;母雞有 4 只;小雞有 84 只; 次數:10201 代碼優化二:   公雞有 0 只;母雞有 25 只;小雞有 75 只; 公雞有 4 只;母雞有 18 只;小雞有 78 只; 公雞有 8 只;母雞有 11 只;小雞有 81 只; 公雞有 12 只;母雞有 4 只;小雞有 84 只; 次數:714 代碼優化三:   公雞有 0 只;母雞有 25 只;小雞有 75 只; 公雞有 4 只;母雞有 18 只;小雞有 78 只; 公雞有 8 只;母雞有 11 只;小雞有 81 只; 公雞有 12 只;母雞有 4 只;小雞有 84 只; 次數:364 代碼優化四:   公雞有 0 只;母雞有 25 只;小雞有 75 只; 公雞有 4 只;母雞有 18 只;小雞有 78 只; 公雞有 8 只;母雞有 11 只;小雞有 81 只; 公雞有 12 只;母雞有 4 只;小雞有 84 只; 次數:121  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved