• 数学的递推方法很巧妙,但推导需要时间
  • 直接采用队列进行模拟 比较容易理解
  • 循环队列的精髓在于: 符合条件:直接将队头元素取出,放到队尾;否则 直接取出丢弃
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();
    }
};