设为首页 收藏本站
查看: 966|回复: 0

[经验分享] PHP解决羊生羊的问题。

[复制链接]

尚未签到

发表于 2017-4-6 11:36:04 | 显示全部楼层 |阅读模式
  面试题一:农夫有一只羊,这只羊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;
}
}
}


  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-361027-1-1.html 上篇帖子: PHP获得用户的真实IP地址 下篇帖子: PHP实现 约瑟夫报数问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表