php+羊,PHP解决羊生羊的问题。

面试题一:农夫有一只羊,这只羊2年后会生一只小羊,5年后羊会死亡,生出来的小羊也是这个规律,2年生一只小羊,5年死亡。

问10年后,这个农夫会有多少羊。

这是一个程序题,如果面到这个题目的时候,如果从数学的角度去考虑这个问题,估计面试官没有这个耐心等我们把这个规律找出来。从程序的角度考虑,这道题就简单多了,只需要记录每只羊的年纪,,他的年纪到了2的倍数就生一个小羊,超过了5年,就杀死他。

// 记录每只羊的编号和年龄

$sheeps = array(

0 => 0,

);

for($i = 1; $i <= 6; $i++) {

// 每年都计算一下羊的个数

$tatolSheeps = count($sheeps);

for($j=0; $j < $tatolSheeps; $j++) {

// 每过一年,所有的羊的年纪大一岁

$sheeps[$j]++;

// 超过5岁,就把这只羊杀掉

if ($sheeps[$j] >= 5) {

unset($sheeps[$j]);

}

else if ($sheeps[$j] % 2 == 0) {

// 生一只小羊,岁数为0

$sheeps[] = 0;

}

}

}

echo count($sheeps);

以上的解法,当年数不超过5年的时候没有问题,一旦超过5年,即有羊死亡,就会出现问题。

// 第五年的数组

Array

(

[1] => 3

[2] => 1

[3] => 1

)

// 第六年的数组

Array

(

[1] => 4

[2] => 2

[3] => 1

[0] => 1

[4] => 0

[5] => 0

)

而正常来说,第三只羊的岁数应该是2岁,不应该有[0] => 1这样奇怪的羊,应该有一个羊为[6]=>0第六年的数组应该是:

Array

(

[1] => 4

[2] => 2

[3] => 2

[4] => 0

[5] => 0

[6] => 0

)

问题就出现在,当我删除一个羊的时候。比如,第五年,我一共有3只羊,我删除了第一只羊,因为他的岁数已经是5岁了,在第六年做for循环的时候,当$j=0时,已经找不到第一只羊了,因为这个羊已经被我删除了,这里就是为什么出现了[0] => 1这样奇怪的羊。同时,$j只能取到2,也就是说,我的第三只羊,即下标为3的羊取不到了。

这个可以使用foreach来避免这样的问题。

$sheeps = array(

0 => 0,

);

for ($i = 1; $i <= 5; $i++) {

foreach ($sheeps as $key => $sheep) {

$sheeps[$key]++;

if ($sheeps[$key] >= 5) {

unset($sheeps[$key]);

}

else if ($sheeps[$key] % 2 == 0) {

$sheeps[] = 0;

}

}

}

面试题二:冒泡排序

$arr = array(1,3,56,22,33,12,19,29,90,12);

$count = count($arr);

for ($i=0; $i < $count; $i++) {

for ($j=0; $j < $count-$i-1; $j++) {

if ($arr[$j] > $arr[$j+1]) {

$k = $arr[$j];

$arr[$j] = $arr[$j+1];

$arr[$j+1] = $k;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值