求解Josephus问题的函数
void Josephus(int A[],int n,s,m){ int i,j,k,tmp;
if(m==0){
printf("m=0是无效的参数!\\n");
return;
}
for(i=0;i<n;i++)A[i]=i+1; /*初始化,执行n次*/
i=s-1; /*报名起始位置*/
for(k=n;k>1;i--){ /*逐个出局,执行n-1次*/
if(i==k)i=0;
i=(i+m-1)%k;/*寻找出局位置*/
if(i!=k-1){
tmp=A[i]; /*出局者交换到第k-1位置*/
for(j=i;j<k-1;j++)A[j]=A[j+1];
A[k-1]=tmp;
}
}
for(k=0;k<n/2;k++){ /*全部逆置,得到出局序列*/
tmp=A[k];A[k]=A[n-k+1];A[n-k+1]=tmp;
}
}
各位前辈,我看不懂这段代码,忘指点,尤其是第九行的for(k=n;k>1;i--){ 和十一行的 i=(i+m-1)%k,还有这段代码的思想,谢谢各位大侠。
我还没积分,有了一定追加给各位。