约瑟夫问题:n个人围成一圈,初始编号从1~n排列,从约定编号为x的人开始报数,数到第m个人出圈,接着又从1开始报数,报到第m个数的人又退出圈,以此类推,最后圈内只剩下一个人,这个人就是赢家,求出赢家的编号。
方案1: 数组
方案2:链表
方案3:递归
公式如下:old = (new + q) % n
这里的old和new指的是下标,n指的是总共有多少人
int f(int n, int m){
return n == 0 ? n : (f(n - 1, m) + m) % n;
}