function MyCircularQueue(){
var items = [];
//向队列插入元素
this.enQueue = function(value){
return items.push(value);
}
//删除元素
this.deQueue = function(){
return items.shift();
}
//查看队首元素
this.front = function(){
return items[0];
}
//查看队列
this.print = function(){
return items.toString();
}
//查看队列长度
this.size = function(){
return items.length;
}
//查看队列是否为空
this.isEmpty = function(){
return items.length == 0;
}
}
/*约瑟夫环问题
* 一群孩子围成一圈,每次传递 n 个数,
* 停下来时手里拿花的孩子被淘汰,直到队伍中只剩下一个孩子
* 即胜利者。
*/
/*参数
*nameList 参与游戏的人数
*n 制定的传递次数
*/
function getLastPerson(nameList, n){
var queue = new MyCircularQueue();
//将名单存入队列
for(var i = 0; i < nameList.length; i++){
queue.enQueue(nameList[i]);
}
var loser = '';
while(queue.size() > 1){
for(var i = 0; i < n; i++){
queue.enQueue(queue.deQueue());
}
loser = queue.deQueue();
console.log('剩余人数' + queue.print() + ' ' + '被淘汰的人为:' + loser);
}
return queue.deQueue();
}
var nameList = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
var winner = getLastPerson(nameList, 6);
console.log('获胜者:' + winner);