php面试题

一道PHP面试题,感觉自己写的不是很优雅,想看看大家怎么写的

小羊能活5岁,它在2岁,4岁的时候都会生一只小羊,5岁的时候就死亡了。
问:现在有一只刚出生的小羊(0岁),n年后有多少只羊?

一只名叫tom的猫
浏览 530回答 3
3回答

喵喔喔

$plus = [2,4];//新羊出生$die = 5;//旧羊死亡$n = 50;$sheeps = [];$sheeps[1] = 0;for($i = 1; $i <= $n; $i++){&nbsp; &nbsp; foreach($sheeps as $index => $value)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; $sheeps[$index]++;&nbsp; &nbsp; &nbsp; &nbsp; if($sheeps[$index] == $die)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unset($sheeps[$index]);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; continue;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; if(in_array($sheeps[$index],$plus))&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $sheeps[] = 0;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}echo(count($sheeps));//n=50,242786

森栏

第一种:function born($n){&nbsp; &nbsp; $all=[0];&nbsp; &nbsp; for($i=0;$i<$n;$i++){&nbsp; &nbsp; &nbsp; $c=count($all);&nbsp; &nbsp; &nbsp; for($j=0;$j<$c;$j++){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $all[$j]=$age=$all[$j]+1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if($age==2||$age==4){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $all[]=0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return $all;}//返回的数据中,把大于等于5的去掉就是了。第二种:function sheep($n){&nbsp; &nbsp; $y=[&nbsp; &nbsp; &nbsp; &nbsp; 0=>1,&nbsp; &nbsp; &nbsp; &nbsp; 1=>0,&nbsp; &nbsp; &nbsp; &nbsp; 2=>0,&nbsp; &nbsp; &nbsp; &nbsp; 3=>0,&nbsp; &nbsp; &nbsp; &nbsp; 4=>0,&nbsp; &nbsp; &nbsp; &nbsp; 5=>0,&nbsp; &nbsp; ];&nbsp; &nbsp; for($i=0;$i<$n;$i++){&nbsp; &nbsp; &nbsp; &nbsp; for($j=5;$j>0;$j--){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $y[$j]=$y[$j-1];&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; $born=$y[2]+$y[4];&nbsp; &nbsp; &nbsp; &nbsp; $y[0]=$born;&nbsp; &nbsp; }&nbsp; &nbsp; return $y;}//unset($y[5]) 再把各项加起来就可以了。两种方法得到的结果是一样的,但第一种方法不断往数组里添加刚出生的羊,数组长度越来越大,我测试了一下,大于 50 的时候就会出现内存不足的情况了。而第二种方法则完全不必担忧。
打开App,查看更多内容
随时随地看视频慕课网APP