昨天我去面试,里面有一道这样的题目,一只母羊,5岁开始生羊一次生一头,20岁死亡。这边我们认为只要到了20岁就死亡(20岁的时候就不生羊了)。
现在从第一年开始有一只5岁的模样求第n年后又几只羊。
当时我是应为没看到或这个题目稍稍有点闷,回事面试结束以后想了一想其实特别简单。
用一个数组,key记录羊的姓名(编号),用value记录羊的年龄。因为每一只5岁的羊每年生一只羊。判断羊的年龄之后累加即可。
function Yang($n) { if (is_int($n) && $n >= 1) {//判断参数是否是正整数 if ($n > 0 && $n <= 5) {//第一到第五年没有另外成年的羊 return $n;//返回羊的总数 } if ($n > 5) { $yang = array();//声明一个空数组。 $sum = 0;//计数器 for ($i = 0; $i < $n; $i++) {//循环年数 if ($i == 0) {//如果是第一年 $yang[$i] = 5;//第一只羊已经5岁 } else {//如果不是第一年 for ($j = 0; $j < $i; $j++) {//循环数组这里$j<$i是因为$i是前一次循环后数组元素的个数 $yang[$j]++;//给每只羊增加岁数 if ($yang[$j] >= 5 && $yang[$j] < 20) {//判断羊是否可以生羊 $sum++;//羊总数加1 } } $yang[$i] = 0;//增加一头羊 } } return $sum;//返回羊的总数 } } else { return '年数必须是正整数'; } }