#include<stdio.h>
void Josephus(int A[10],int s,int n,int m)
{ int i,j,k,tmp;
if(m<=0||s<1||n<0||s>n)
printf("数据错误!");
else
{
i=s-1; /*报数起始位置*/
for(k=n;k>1;k--)
{
i=(i+m-1)%k; /*第n-k+1个出局者的位置*/
if(i!=k-1)
{ /*交换n-k+1个出局者到A[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;
}
printf("出局序列为:\n");
for(j=0;j<n;j++)
printf(" %d ",A[j]);
}
}
void main()
{
int n=10;
int m,s;
int A[10];
int j;
for(j=0;j<n;j++)
A[j]=j+1;
printf("\n共有10个人,从第s个开始报数,数到m的人出列\n");
printf("请输入s m:\n");
scanf("%d %d",&s,&m);
printf("共有%d个人,从%d个开始报数,数到%d的人出列\n",n,s,m);
Josephus(A,s,n,m);
printf("\n");
}
C-Vector-Josephus.rar_visual c
版权申诉
152 浏览量
2022-09-20
21:14:11
上传
评论
收藏 659B RAR 举报
林当时
- 粉丝: 94
- 资源: 1万+