话不多说,直接上代码。
回来补上问题:
约瑟夫问题是个有名的问题:M个人围成一圈,从第一个开始报数,第N个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3。
当然,这个一共有几个人,剩下多少个你自己决定,我的是30个人,剩下15个人就行,so,我的count==15时,我跳出了循环。
int a[100] = {0};
//约瑟夫环 (数组)
main()
{
int m, n, i = 0,k = 0;//m人,第n出局
int count = 0;
scanf("%d%d",&m,&n);
while(count != m)
{
i++;
if(i > m)
{
i = 1;
}
if(a[i] == 0)
{
//k计数,表示第几个人
k++;
//当k==n,表示这个人出局,重新开始计数
if(k == n)
{
a[i] = 1;
count++;
printf("%d ",i-1);
k = 0;
if(count == 15)
break;
}
}
}
return 0;
}
3984

被折叠的 条评论
为什么被折叠?



