Josephus算法

void Josephus(int A[], int n,int s,int m)
{
	int i,j,k,tmp;
	if(m==0){
		printf("m = 0 无效\n");
		return;
	}
	for(i=0;i<n;i++)
	{
		A[i]=i+1;
	}
	i = s - 1;//设置第几个人开始叫号
	for(k=n;k>1;k--)//倒序遍历
	{
		if(i==k) i=0; //遍历完毕
		i = (i+m-1)%k ;  //开始叫号
		if(i!=k-1){  //叫到了
			tmp = A[i];
			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(i=0;i<n;i++)
	{
		printf("%d",A[i]);
	}
	

}

你可能感兴趣的:(C++,c,算法,C#,J#)