约瑟夫问题求解(真心想不出来了)
程序代码:
#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; } 试过很多办法但现在不知道哪里错了