题目:
标号为0~6的6个小朋友围成一圈,开始数数,数到数字5的人自动淘汰,不断循环,剩下的最后一个人胜利。
问:最后胜利的人是谁?
解析:
将这6个学生放入队列中,每个人报一个数的同时出队,并重新进入队列尾部。
数到5的学生,出队后不再重新加入队列。
依次循环,直到队列中只有一个人,即为最后的胜利者。
解决方法:
第一步:封装队列类
//封装队列类
function Queue(){
//属性
this.items = [];
//方法
//1、将我们的元素加入到队列中
Queue.prototype.enqueue = function(element) {
this.items.push(element)
}
//2、从队列中删除前端元素
Queue.prototype.dequeue = function() {
return this.items.shift();
}
//3、查看前端元素
Queue.prototype.front = function() {
return this.items[0];
}
//4、查看队列是否为空
Queue.prototype.isEmpty = function() {
return this.items.length===0;
}
//5、查看队列中元素的个数
Queue.prototype.size = function() {
return this.items.length;
}
//6、toString方法
Queue.prototype.toString = function() {
var resultString = "";
for(var i = 0; i < this.items.length; i++){
resultString += this.items[i] + ' ';
}
return resultString;
}
}
第二步:使用队列类
//击鼓传花
function passGame(nameList,num){
//1、创建一个队列结构
var queue = new Queue();
//2、把学生加入队列
for(var i = 0; i < nameList.length; i++){
queue.enqueue(nameList[i]);
}
//3、进行数数
while(queue.size() > 1){
//不是num,加入队尾
for(var i = 0;i < num - 1; i++){
queue.enqueue(queue.dequeue());
}
//是num,直接删除
queue.dequeue();
}
//4、获取剩下的那个人
return queue.front();
}
var winner = passGame([1,2,3,4,5,6],5);