题解 | #约瑟夫问题I#

约瑟夫问题I

http://www.nowcoder.com/questionTerminal/11b018d042444d4d9ca4914c7b84a968

  • 数学的递推方法很巧妙,但推导需要时间
  • 直接采用队列进行模拟 比较容易理解
  • 循环队列的精髓在于: 符合条件:直接将队头元素取出,放到队尾;否则 直接取出丢弃
class Joseph {
public:
    int getResult(int n, int m) {
        queue<int>s;//队列
            for(int j=1;j<=n;j++){//初始元素入队(1~n)
                s.push(j);
            }
        while(!s.empty()){
            for(int i=1;i<m;i++){//前m-1个从队头取出,放到队尾
                s.push(s.front());
                s.pop();
            }
            s.pop();//数到m个,丢掉一个
            if(s.size()==1){//只剩一个,结束
                
                break;
            }
        }
        return s.front();
    }
};
全部评论

相关推荐

我朋友的华子2012,HR已经开始问意向地区了,好急
不讲武德的黑眼圈很能干:急得不行 也不说评级 不知道报的多少啊😡
点赞 评论 收藏
分享
10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
死在JAVA的王小美:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我也是,让我免了一轮,但是硬气拒绝了
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务