3 回答

TA貢獻1735條經(jīng)驗 獲得超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條經(jīng)驗 獲得超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;
}
//返回的數(shù)據(jù)中,把大于等于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]) 再把各項加起來就可以了。
兩種方法得到的結果是一樣的,但第一種方法不斷往數(shù)組里添加剛出生的羊,數(shù)組長度越來越大,我測試了一下,大于 50 的時候就會出現(xiàn)內(nèi)存不足的情況了。
而第二種方法則完全不必擔憂。
- 3 回答
- 0 關注
- 576 瀏覽
添加回答
舉報