兄弟,这算法让我自己想是绝对想不到的;刚才调试了下,弄清了算法的基本思路,大致如下:
程序代码:
程序代码:void Josegh(void)
{
int i,j;
int s1,w; //s1跟踪数数的步调(初始值为1);w为中间变量,用来保存要出列的人的序号
s1=s;
for(i=1;i<=n;i++)
p[i-1]=i;//用数组存储序号
for(i=n;i>=2;i--) //n=100
{
s1=(s1+m-1)%i; //此时的s1为数到10的人的序号,s1=0以下特殊处理
if(s1==0)//刚好为未出列的最后一员
s1=i;
w=p[s1-1];//中间变量存储要出列的人的序号
for(j=s1;j<=i-1;j++) //若出列的人不是最后一个,则从出列的人以后依次向前移动一位
p[j-1]=p[j];
p[i-1]=w; //移动后空出的最后以为存储w即出列的人的序号
}//这样反复循环后,数组中存储的为依次出列的序号的逆序,下面有用到for循环逆序输出的语句就是刚好要出列的人的依次序号
}

A real warrior never quits.








