您的位置:首页 > 其它

约瑟夫环问题

2015-12-03 17:46 316 查看
//有n个人围成一个圈,编号1~n,从第1个开始报数,当报到m时该人出队,然后下一个人从1开始继续报数。
//输出所有人出队的顺序。
1 #include <stdio.h>
int main(int argc, char *argv[])
{
int a[1000]={0};
int i,n,m;
int count1;//出队人数
int count2;//当前人报的数字
scanf("%d%d",&n,&m);
count1=0;//还没人出队
count2=0;//当前报数
i=0;//需要检查的人的下标

while(count1<n)//还有人没有出队就继续循环
{
while(a[i]!=0)//寻找下一个还没出队的人
{
i++;
if(i==n) i=0;
}
count2++;//找到一个没出队的人,该人报数
if(count2==m)//假如第i人报数m则他出队
{
printf("%d\n",i+1);
a[i]=1;
count1++;
count2=0;
}
i++;//下次应该检查下一个人
if(i==n) i=0;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: