#include <stdio.h>
#define M 80
void main()
{
printf("\n\n*******************************************************************************\n\n");
printf(" 约瑟夫问题:M 个人围成一圈,从第一个人开始报数,数到 N 的人出圈。再由下一个人开始报数,数到 N 的人出圈。打印出依次出圈的人的编号。(M=80)\n\n");
printf("*******************************************************************************\n\n");
int N,i,k=-1,j,out=0;
printf("『 请输入 N 的数值 』:");
scanf("%d",&N);
printf("\n\n『 下面是各个成员的出圈顺序:』\t");
int a[M];
for(i=0;i<M;i++)
a[i]=i+1;//数组初始化。
for(j=0;;j++,k++)
{
if(k>=M)
k=k-M;
while(a[k]==0)//去除以出圈成员
{
k++;
if(k>=M)
k=k-M;
}
if(j==N)
{
while(a[k]==0)
{
k++;
if(k>=M)
k=k-M;
}
printf("%d\t",a[k]);
a[k]=0;
out++;
j=0;
}
if(out==M)//当所有成员出圈后停止循环
break;
}
printf("\n\n\n\n");
scanf("%d",&N);
}
评论0