小羊能活5岁,它在2岁,4岁的时候都会生一只小羊,5岁的时候就死亡了。问:现在有一只刚出生的小羊(0岁),n年后有多少只羊?
4 回答
素胚勾勒不出你
TA贡献1827条经验 获得超9个赞
第一种:
function born($n){ $all=[0]; for($i=0;$i<$n;$i++){ $c=count($all); for($j=0;$j<$c;$j++){ $all[$j]=$age=$all[$j]+1; if($age==2||$age==4){ $all[]=0; } } } return $all; }//返回的数据中,把大于等于5的去掉就是了。
第二种:(在 @雪之祈舞 的回答上作了一点修改)
function sheep($n){ $y=[ 0=>1, 1=>0, 2=>0, 3=>0, 4=>0, 5=>0, ]; for($i=0;$i<$n;$i++){ for($j=5;$j>0;$j--){ $y[$j]=$y[$j-1]; } $born=$y[2]+$y[4]; $y[0]=$born; } return $y; }//unset($y[5]) 再把各项加起来就可以了。
两种方法得到的结果是一样的,但第一种方法不断往数组里添加刚出生的羊,数组长度越来越大,我测试了一下,大于 50 的时候就会出现内存不足的情况了。
而第二种方法则完全不必担忧。
holdtom
TA贡献1805条经验 获得超10个赞
$y=[0=>1,1=>0,2=>0,3=>0,4=>0,5=>0]; $n =20;for($i=0;$i<=$n;$i++) { $temp = ($y[2]+$y[4])*2; $y[5]=$y[4]; $y[4]=$y[3]; $y[3]=$y[2]; $y[2]=$y[1]; $y[1]=$y[0]; $y[0]=$temp; } print_r($y); print_r(array_sum($y));
添加回答
举报
0/150
提交
取消