Java教程

队列应用-击鼓传花

本文主要是介绍队列应用-击鼓传花,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
// 队列的应用
let Queue = require('./01队列的封装')
/**
 * 使用队列实现小游戏:击鼓传花,
 * 传入一组数据和设定的数字num,循环遍历数组内元素,
 * 遍历到的元素为指定数字num时将该元素删除,直至数组剩下一个元素。
 */
// 队列应用:面试题:击鼓传花
let passGame = (nameList, num) => {
    //1.创建队列结构
    let queue = new Queue()
    //2.将所有人依次加入队列
    // 这是ES6的for循环写法,i相当于nameList[i]
    for (let i of nameList) {
        queue.enQueue(i)
    }
    // 3.开始数数
    while (queue.size() > 1) {
        //队列中只剩1个人就停止数数
        for (let i = 0; i < num - 1; i++) {
            /**
             * 思路是这样的,由于队列没有像数组一样的下标值不能直接取到某一元素,
             * 所以采用,把num前面的num-1个元素先删除后添加到队列末尾,
             * 这样第num个元素就排到了队列的最前面,
             * 可以直接使用dequeue方法进行删除
             * 如此循环往复即可
             * */
            queue.enQueue(queue.deQueue())
        }
        // num对应这个人,直接从队列中删除
        queue.deQueue()
    }
    //4.获取剩下的那个人
    let number="还剩下人的个数是:"+queue.size()
    console.log(number);
    let endName = queue.frontQueue()
    console.log('最终剩下的人:' + endName);	
    // 返回这个人对应的下标
    let result="该人员对应的下标是:"+nameList.indexOf(endName)
    return result
}
module.exports=passGame

测试代码

let passGame=require('./03队列应用-击鼓传花')  
   //5.测试击鼓传花
   let names = ['lily', 'lucy', 'Tom', 'Lilei', 'Tony']
   console.log(passGame(names,3));

结果

这篇关于队列应用-击鼓传花的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!