| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1612 人关注过本帖
标题:基于数组实现队列的问题,在求解 击鼓传花 时遇到问题,求大神帮看代码
只看楼主 加入收藏
手工馒头
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2022-4-3
收藏
 问题点数:0 回复次数:1 
基于数组实现队列的问题,在求解 击鼓传花 时遇到问题,求大神帮看代码
//几个朋友玩一个游戏,围成一个圈,开始数数,数到某个数字时,对应位置的人淘汰,直到只剩一个人时游戏结束,并求出剩余的那一个人原来的位置
    // 基于数组封装队列,该方法性能不高,只为学习
    function Queue(){
        this.list = []
        Queue.prototype.enqueue = function(params){
            this.list.push(params)
        }
        Queue.prototype.dequeue = function(){
            this.list.shift()
        }
        Queue.prototype.front = function(){
            return this.list[0]
        }
        Queue.prototype.size =function(){
            return this.list.length
        }
        Queue.prototype.isEmpty = function(){
            return this.list.length === 0
        }
        Queue.prototype.toString = function(){
            let s = ''
            for(var i = 0; i < this.list.length; i++){
                s += this.list[i] + ' '
            }
            return s
        }
    }

//nameList为玩游戏的人组成的数组, num为数到的数字
//思路:1、num之前的人不会被淘汰,放入队列最后面。  2、删除num位置的元素。  3、从新开始数数,重复1、2步骤,直到队列中仅剩一人  
 function DrummingToPassFlowers(nameList, num) {
        // 1、创建队列
        var queue = new Queue();
        // 2、将数组nameList中的元素添加进队列中
        nameList.forEach(item => {
           queue.enqueue(item)
        })
        // 5、重复执行3、4,直到队列中只剩一人
        while(queue.size() > 1){
           // 3、将num之前的元素添加到队列末尾
           for(var i = 0; i < num-1; i++){
               // 经验证,此处出问题,但是不知道为什么
               queue.enqueue(queue.dequeue())
           }
           // 4、删除num位置的元素
           queue.dequeue()
        }
        var endName = queue.front()
        return nameList.indexOf(endName)
    }
    var na = ['qoqo', 'wowo', 'eoeo', 'roro', 'toto', 'yoyo']
    alert(DrummingToPassFlowers(na, 4));
搜索更多相关主题的帖子: this 队列 list Queue function 
2022-04-03 23:29
hugeannex
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:483
专家分:911
注 册:2005-3-20
收藏
得分:0 
不太明白怎么玩,但
如:[1,2,3,4],num=3,则要把1,2添加到队列末尾,你的方法就出问题了。
for第一轮时,结果 [4,1,2]
然后while仍大于1,又下一轮
for的条件 num-1仍为2了,最后删了2,结果为。。。乱的。。。
即num-1这个条件不对,可能超出了人员的长度。

世事如潮我如水,只叹江湖几人回。
2023-12-19 11:41
快速回复:基于数组实现队列的问题,在求解 击鼓传花 时遇到问题,求大神帮看代码 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023804 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved