题解 | #约瑟夫问题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();
    }
};
全部评论

相关推荐

03-27 11:55
上海大学 运营
1900+能进面吗?
offer快到怀里来叭:全a都进不了
投递携程等公司10个岗位 > 携程求职进展汇总
点赞 评论 收藏
分享
02-17 20:43
西北大学 Java
在做测评的猫头鹰很紧张:他问你,你问deep seek
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务