3 回答
TA贡献1735条经验 获得超5个赞
$plus = [2,4];//新羊出生
$die = 5;//旧羊死亡
$n = 50;
$sheeps = [];
$sheeps[1] = 0;
for($i = 1; $i <= $n; $i++)
{
foreach($sheeps as $index => $value)
{
$sheeps[$index]++;
if($sheeps[$index] == $die)
{
unset($sheeps[$index]);
continue;
}
if(in_array($sheeps[$index],$plus))
{
$sheeps[] = 0;
}
}
}
echo(count($sheeps));//n=50,242786
TA贡献1810条经验 获得超5个赞
第一种:
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 的时候就会出现内存不足的情况了。
而第二种方法则完全不必担忧。
- 3 回答
- 0 关注
- 550 浏览
添加回答
举报