一群猴子,编号是1,2,3 …m,这群猴子(m个)按照1-m的顺序围坐一圈。从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王。输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号猴子。
解法一:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>Monkey King</title>
<script type="text/javascript">
function getKing(originLength, amount) {
var originArray = [];
var finalArray = [];
var originFixLength = originLength;
var index = amount;
//初始化猴子编号 依次为1,2,3,4...
for (var i = 1; i <= originFixLength; i++) {
originArray.push(i);
}
for (var j = 1; j <= originFixLength; j++) {
var tmpOriginLength = originLength;
if (index > originLength) {
index %= originLength;
}
var deleteIndex = index - 1;
console.log("delete element index : " + deleteIndex);
//删除猴子 加入新数组
finalArray.push(originArray.splice(deleteIndex, 1));
originLength = originArray.length;
console.log("the changed array length : " + originLength);
var tmp = tmpOriginLength - index;
if (amount > tmp) {
index = amount - tmp;
} else {
index += (amount - 1);
}
}
//依次输出出去的猴子
for ( var s = 0; s < finalArray.length; s++) {
console.log(finalArray[s] + "--");
}
}
</script>
</head>
<body>
<input type="button" value="getKing" οnclick="getKing(5, 10)" />
</body>
</html>
解法二:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>Monkey King</title>
<script type="text/javascript">
function getKing(originLength, amount) {
var i,j,t;
var originArray = [];
//初始化猴子 1表示没出去,出去了置为0
for (var i = 1; i <= originLength; i++) {
originArray.push(1);
}
t = -1;
for (i = 1; i <= originLength; i++)
{
j = 1;
while (j <= amount)
{
t = (t + 1) % originLength; //轮询猴子
if (originArray[t] == 1) j++; //为0的猴子跳过
}
originArray[t] = 0; //猴子出圈
console.log(t + 1); //输出出圈猴子的编号
}
}
</script>
</head>
<body>
<input type="button" value="getKing" οnclick="getKing(5, 1)" />
</body>
</html>