找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2677|回复: 1

[求助] [php基础]猴子选 大王问题

  [复制链接]
发表于 2016-7-3 09:05:46 | 显示全部楼层 |阅读模式 来自 陕西省安康市
本次悬赏总金额:100 金币 | 剩余悬赏金额:0 金币
本次悬赏到期时间: 2016-07-29 09:04 | 本悬赏贴已经到期,不再接受回复。
快来加入[悬赏团队],每次获得楼主奖励时可获得系统额外20金币的系统奖励。

可报名人数: 2| 已报名会员: 0| 剩余名额: 2

只允许悬赏会员本人发放悬赏金币 | 只允许悬赏会员本人收回悬赏金币 | 最多悬赏人数:10人
还没有会员获得悬赏奖励,加油,快来争头奖!
本问题的悬赏已经结束!

练题2:n只猴子围坐成一个圈,按顺时针方向从1到n编号。
然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,
再从刚出局猴子的下一个位置重新开始报数,
如此重复,直至剩下一个猴子,它就是大王。

设计并编写程序,实现如下功能:
(1)   要求由用户输入开始时的猴子数$n、报数的最后一个数$m。
(2)   给出当选猴王的初始编号。
  1.     function king($m ,$n)
  2.     {
  3.     //构造数组
  4.     for($i=1 ;$i<$m+1 ;$i++){
  5.     $arr[] = $i ;
  6.     }
  7.     $i = 0 ;    //设置数组指针
  8.     while(count($arr)>1)
  9.     {
  10.     //遍历数组,判断当前猴子是否为出局序号,如果是则出局,否则放到数组最后
  11.     if(($i+1)%$n ==0) {
  12.     unset($arr[$i]) ;
  13.     } else {
  14.     array_push($arr ,$arr[$i]) ; //本轮非出局猴子放数组尾部,为什么要放到尾部??
  15.     unset($arr[$i]) ;   //删除
  16.     }
  17.     $i++ ;
  18.     }
  19.     return $arr ;
  20.     }
  21.     var_dump(king(6,4));

复制代码
问题:array_push($arr ,$arr[$i]) ; //本轮非出局猴子放数组尾部,为什么要放到尾部??


发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2016-7-3 14:06:47 | 显示全部楼层 来自 黑龙江省哈尔滨市
     首先,array_push()这个函数本身的意思就是把指定的数据放入一个数组的最后位置。     其次,“本轮非出局猴子放数组尾部”,在数组遍历的时候,把每一个非出局的猴子放在该数组的最后,即将$arr[$i]放入$arr的最后面,当数组遍历结束的时候,数组$arr里面的所有元素会按循环的时候重新排列。再根据if判断要不要继续遍历循环(while),从而确定最后返回的数组($arr)。

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-4-27 18:38 , Processed in 0.055512 second(s), 13 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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