2017自如技术大赛研发组题目六:木木熊问题(类约瑟夫环问题)

6. 每年夏季自如都会组织夏季夏令营活动,每年组委会都会给来京参加夏令营的小朋友准备好多礼物,今年也是如此。
组委会准备了一些小游戏来获得这些礼物,其中有一个游戏是这样的:组委会让小朋友围成一个圈。然后随机制定一个数e,让编号为0的小朋友开始报数。每次喊道e-1的小朋友直接出列,淘汰出局。从本次喊道e-1的下一个小朋友开始,继续从0报数...e-1淘汰出局...一直这样进行....最后进行到最后一个小朋友,这位小朋友可以拿到“熊帅”亲笔签名的“木木”熊毛绒玩具。
(注:小朋友的编号是从0到n-1)
示例:
输入:n=1314 e=520 
输出:796 
【PHP实现】
<?php
/**
* Created by PhpStorm.
* User: ZKBHJ
* Date: 2017/12/2
* Time: 18:14
*/

class Summer {

//小朋友总数
public $childCounts = 1314;

//小朋友围成的圈儿
public $childCircle = array();

//指定的随机数
public $e = 520;


//初始化围成一个圈儿
private function initCircle()
{

for($i = 0; $i< $this->childCounts; $i++){
$this->childCircle[$i] = $i;
}
}


private function findChild()
{

$index = 0;
for ($i = 2; $i <= $this->childCounts; $i ++) {
$index = ($index + $this->e) % $i;
}
return $index;

}

public function getResult()
{
$this->initCircle();
return $this->findChild();
}

}

//获取输入变量
$params = explode(' ', trim(fgets(STDIN), " \t\n\r\0\x0B[]"));
foreach($params as $k => $v){
$params[$k] = explode('=',$v);
}

$summer = new Summer();
$summer->childCounts = $params[0][1];
$summer->e = $params[1][1];
echo $summer->getResult();

0 个评论

要回复文章请先登录注册