首先这个案例的规则是
几个朋友一起玩一个游戏,围成一圈,开始数数,数到某个数字的人自动淘汰。
最后剩下的这个人会获得胜利,请问最后剩下的是原来哪一个位置上的人?
参数:所有参与人的姓名,基于的数字
结果:最终剩下的一人的姓名
先将队列封装一下
//封装队列类
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] + 0
}
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的时候,重新加入到队列的末尾
// 是num这个数字的时候,将其从队列中删除
// 3.1num数字之前的人重新放入到队伍到末尾
for(var i=0;i<num -1;i++){
queue.enqueue(queue.dequeue())
}
// 3.2num对应这个人,直接从队列中删除掉
queue.dequeue()
}
// 4.获取剩下到那个人
alert(queue.size())
var endName = queue.front()
alert('最终剩下的人:'+endName)
return nameList.indexOf(endName)
}
//测试击鼓传花
names = ['jdl','ldj','ljd','wdj','haha']
alert(passGame(names,3))