namespace __4_CS
{
//约瑟夫环的关键问题,下一个删除的位置 :(t+m-1) % i
//t : 上次出列的位置,初始化为0
//m: 第m个要出去
//i :当期数组的长度
//-1 : 从0开始的数组
class josephus_cycle
{
//values; //约瑟夫环的原始数据
//i 约瑟夫环中还剩下的数据个数
//t 上一个被踢出的兄弟的index
//m 约瑟夫环的m,第m个兄弟要被踢出
static public void josephus_begin(int[] beginValue,int m,int i)
{//关键(t+m-1) % i ,当没有数据的时候结束
int t = 0; //上一个被踢出的兄弟的index,t初始化为0
while(i>0)
{
t = (t + m -1) % i;
Console.Write("{0},",beginValue[t]);
for(int j=t+1;j<i;j++)
{
beginValue[j-1] = beginValue[j];
}
i--; //元素个数少了1
}
}
}
}