反正这高人写的肯定是错的,请无视之
你给的所谓约瑟夫环的定义就不对,按照你的定义,我写了一个函数:
static int JosephusCycle(int n, int m)
{
int x = 0;
int mod = 0;
while (n > 1)
{
x += n;
int div = (n + mod) / m;
mod = div > 0 ? (n + mod) % m : mod + ((n + mod) % m);
n -= div;
}
return x;
}
实际的约瑟夫环的定义是编号为1,2,3,……,n的n个人按顺时针方向围坐一圈。任选一个正整数作为报数上限m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。设计程序输出出列顺序。
即报到3的人退出后,报数重置了,重新从1开始报,你给的那个高人的代码是按照这个定义做的,高人写的是没有错的。