PHP经典题:百钱百鸡问题(穷举算法)
2015-11-15 16:24
741 查看
百钱百鸡问题:
已知:公鸡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
已知:公鸡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
相关文章推荐
- PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
- [转]php 在各种web服务器的运行模式
- 浅谈PHP
- (PHP)正则表达式-忽略空白
- (PHP)正则表达式-忽略大小写
- (PHP)正则表达式-贪婪匹配与懒惰匹配的区别
- PHP判断数组Array的维度(已封装函数)
- thinkphp3.2独立分组的建立
- 如何用PHPExcel读取超大excel文件
- 关于yii2 REST api 的问题
- [1095]:A+B for Input-Output Practice (VII)
- [1094]:A+B for Input-Output Practice (VI)
- [1093]:A+B for Input-Output Practice (V)
- [1092]:A+B for Input-Output Practice (IV)
- [1091]:A+B for Input-Output Practice (III)
- [1090]:A+B for Input-Output Practice (II)
- [1089]:A+B for Input-Output Practice (I)
- php的安装配置
- php和html混写,遍历出二维关联数组
- php面向对象--多态