猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
php面试题
一道PHP面试题,感觉自己写的不是很优雅,想看看大家怎么写的
小羊能活5岁,它在2岁,4岁的时候都会生一只小羊,5岁的时候就死亡了。
问:现在有一只刚出生的小羊(0岁),n年后有多少只羊?
一只名叫tom的猫
浏览 551
回答 3
3回答
喵喔喔
$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
0
0
0
森栏
第一种: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 的时候就会出现内存不足的情况了。而第二种方法则完全不必担忧。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续