一只羊的故事

来源:互联网 发布:天天有喜知画心脏 编辑:程序博客网 时间:2024/04/29 00:58

     今天看到了一道很有意思的题目:假如有一只羊,第3年第4年的时候,可以各生一只小羊;第5年死亡;小羊养到第3年和第4年的时候,也可以各生一只小羊,第5年死亡。问10年之后,拥有多少只小羊?

      刚看到这道问题,就想到了一个方法:

<?phpfunction sheep($int, $year) {       $arr = array();       for ($i=1; $i<=$int; $i++) {              $arr[] = 1;       }       for ($j=1; $j<$year; $j++) {              foreach ($arr as $k=>$v) {                     $arr[$k] += 1;                     if ($arr[$k]==3)                            $arr[] = 1;                     elseif ($arr[$k]==4)                             $arr[] = 1;                     elseif ($arr[$k]==5)                             unset($arr[$k]);              }            }       return count($arr).'</br>';}?>

   在现有的条件下,可以实现想要的功能。但是在年份比较多的情况下,循环次数增加,数组成员剧增,内存直接报警,50年就超过了128M内存,所以这个方法绝对是不适用的。

   仔细思考了一下,羊在第5年就死亡了,也就是说只能活到四岁,那么就把同龄的羊归类到一起不就可以了,那就从一个几百万成员的大数组,变成了只有四个成员的数组。

<?phpfunction new_sheep($int, $year) {       $arr = array($int,0,0,0,0);       for ($i=1; $i<$year; $i++) {              list($one,$two,$three,$four,$five)= $arr;              $arr[0] = $two + $three;              $arr[1] = $one ;              $arr[2] = $two;              $arr[3] = $three;       }       return ($arr[0]+$arr[1]+$arr[2]+$arr[3]);}?>

再测试了一下,没有内存溢出的提示了。

题目本身并不是很难的题,甚至都称不上编程的题目。但就这样的一个题目,仔细思考一下,就能把性能优化这么多。可见平时开发过程中、遇到的的功能模块,一定要多去思考解决方案、多去学习成熟的解决思路!每次完成一个功能,都要及时的进行总结,不能让自己的项目经验变成项目经历

1 0
原创粉丝点击