游戏规则:
几个朋友一起玩一个游戏, 围成一圈, 开始数数(数数时数字都是挨着的,第一个人数1,之后的人数2), 数到某个数字的人自动淘汰。淘汰的人后面再从1开始数,重复上面的游戏,直到就剩下一个人,请问剩下了谁
这个可以用到对列的数据结构,整个队伍放在一个队列中,当某一个人数完之后就把他放在队列的末尾
function f(nameList, num) {
while (nameList.length > 1) {
var queue = nameList;
//内层循环将要删除的人放在了队尾,所以我们只需要队尾删除这个人即可
for (var i = 0; i < num; i++) {
//队头的人数数,数完后给他放在队尾
queue.push(queue.shift())
}
//删除这个喊到num这个数字的人
queue.pop();
//给原队列重新赋值为删除喊到那个数字的人之后的队列,重新进行下一轮循环,删除下一个人,直到就剩下一个人为止
nameList = queue;
}
return nameList[0];
}
注意:看被人文章时会有人先定义JavaScript的队列构造函数,但是其实我们不需要,队列的特征(队尾插入,队头删除)我们完全可以使用内置的push和shift方法