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

相关推荐

小狗吃臭臭:以后用不到你设计的手机了,可惜!
点赞 评论 收藏
分享
02-19 12:50
黑龙江大学 Java
饼子吃到撑:你给他20,让他给你上班你看看他愿不愿意
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务