约瑟夫斯问题

一共有n个人,编号为1,2......,n。从第一个人开始,把自己左手边的人给淘汰出局(就是二号),以此类推,最后剩编号为几的人?

通过二进制来看

int main(int argc, const char * argv[]) {
    int n;
    cin >>n;
    int x = n - (1<<(int)log2(n));
    cout <<2 *x +1;
    
    return 0;
}
posted @ 2019-12-24 16:34  0x8023  阅读(157)  评论(0编辑  收藏  举报