$x的疑问
来源:2-9 编程练习
cfrq_xuan
2019-11-24 20:26:31
// for($m=1;$m<33;$m++){
// for($g=1;$g<20;$g++){
// $x=100-$g-$m;
// if($g+$m+$x==100&&$g*5+$m*3+$x/3==100){
// echo '公鸡有'.$g.'<br/>';
// echo '母鸡有:'.$m.'<br/>';
// echo '小鸡有:'.$x.'<br/>';
// echo '<hr/>';
// }
// }
// }
for($m=1;$m<33;$m++){
for($g=1;$g<20;$g++){
for($x=3;$x<300;$x=+3){
if($g+$m+$x==100&&$g*5+$m*3+$x/3==100){
echo '公鸡有'.$g.'<br/>';
echo '母鸡有:'.$m.'<br/>';
echo '小鸡有:'.$x.'<br/>';
echo '<hr/>';
}
}
}
}
老师,$x为什么必须设置为$x=100-$g-$m,后面恒等式中也有$g+$m+$x=100,不是一个意思么?为什么不能来个for循环呢?
4回答
好帮手慕小尤
2019-11-27
同学你好,需要设置$x=100-$g-$m表达式的是两层循环。代码如下:
for($m=1;$m<33;$m++){
for($g=1;$g<20;$g++){
$x=100-$g-$m;
if($g+$m+$x==100&&$g*5+$m*3+$x/3==100){
echo '公鸡有'.$g.'<br/>';
echo '母鸡有:'.$m.'<br/>';
echo '小鸡有:'.$x.'<br/>';
echo '<hr/>';
}
}
}运行流程:
当m=1时,m小于33则开始循环
当g=1时,g小于20 开始循环,计算100-1-1的表达式得出x值,然后进行判断,1+1+98==100(成立)5+3+32.666==100(不成立)则g++键入下次循环
当g=2时,g小于20 开始循环,计算100-2-1的表达式得出x值,然后进行判断,2+1+97==100(成立)10+3+32.333==100(不成立)则g++键入下次循环......执行到g大于20时,循环结束开始外层循环的第二次循环。
当m=2时,m小于33则开始循环
当g=1时,g小于20 开始循环,计算100-1-2的表达式得出x值,然后进行判断,1+2+98==100(成立)5+6+32.333==100(不成立)则g++键入下次循环
当g=2时,g小于20 开始循环,计算100-2-2的表达式得出x值,然后进行判断,2+2+96==100(成立)10+6+32==100(不成立)则g++键入下次循环 ......
一直循环到 m=4,g=12 时,计算100-12-4的表达式得出x值。然后进行判断12+4+84==100(成立)并且60+12+28(成立)则进行输出。
然后一直执行到m大于33时,结束循环。如果同学不定义为$x=100-$g-$m,则无法获取到小鸡的数量,导致if判断不成立,导致无法计算出公鸡母鸡与小鸡的数量。
祝学习愉快!
好帮手慕小尤
2019-11-26
同学你好,同学是想问$x=100-$g-$g与三次循环的两种实现方式的关系吗?如果是,则是没有关系的。两次循环是通过循环得到公鸡与母鸡的只数,然后通过100减去公鸡与母鸡的只数得出小鸡的数量。三次循环是通过循环来确定数量。所以两个没有关系。如果不是请同学重新描述一下问题。
祝学习愉快!
好帮手慕小尤
2019-11-26
同学你好,三个循环代码参考:
for($x=1;$x<=20;$x++){
for($y=1;$y<=33;$y++){
for($z=1;$z<=100;$z++){
if(($x+$y+$z)==100 && ($x*5+$y*3+$z/3)==100 ){
echo '公鸡有',$x,'<br/>母鸡有:',$y,'<br/>小鸡有:',$z,'<hr/>';
}
}
}
}祝学习愉快!
好帮手慕小尤
2019-11-25
同学你好,1. $x=100-$g-$m:是将$x当为小鸡,然后通过100减去公鸡和母鸡的只数,就是小鸡的只数变量。
2. $g+$m+$x==100 是判断公鸡+母鸡+小鸡的数量是否是100。所以$x=100-$g-$m与$g+$m+$x==100意思是不一样的。
3. 建议同学使用两个循环实现,减少了循环次数,提高运行效率。
祝学习愉快!
相似问题
回答 1