约瑟夫问题求解(真心想不出来了)
程序代码:#include"stdio.h"
int ant(int n[])//统计函数
{
int i;
for(i=0;;)
{
if(n[i]==0)
i++;
else
return i;
}
}
int main()
{
int man[200]={0};//游戏人数
int die=0;//每隔die人死一个
int k=1;//k为报数计数器
int t=0;//剩余人数
int y=0;//人数
int i=0;//此时轮到报数者
int z=0;
printf("请输入游戏人数与报数轮数:");
scanf("%d %d",&y,&die);//输入游戏人数
for(i=1;i<=y;i++)
{
man[i]=1;//。。。对数组初始化
//printf("%d",man[i]);
}
t=i-1;//让T接任I
i=1;//清零
while(t>1)//当游戏人数大于1时开始循环
{
if(i==y&&k%die!=0)//此人是否为队伍的最后一人
{
i=1;//回去重报
k++;
continue;//重新循环
}
else if(k%die==0)
{
man[i]=0;//这货挂了
k=1;//报数清0
t--;//游戏人数减少
i=1;
continue;
}
if(man[i]!=0&&k%die!=0)//如果此人不为空
{
k++;//接着报
i++;//下一位
continue;
}
if(k%die==0)//此人为要死者
{
man[i]=0;//这货挂了
k=1;//报数清0
t--;//游戏人数减少
i++;//下一位!!
continue;
}
if(man[i]==0)//此人是否挂了
{
i++;//直接下一位
continue;
}
}
for(i=1;i<y;i++)
{
printf("%d",man[i]);
}
z=ant(man);//统计剩下那货是谁
printf("\t%d",z);
return 0;
}
试过很多办法但现在不知道哪里错了




