约瑟夫环问题
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int a[155];
int num(int n)
{
int i,j;
int count;
int mark;
int key;
for(i=2;;i++)
{
for(j=0;j<n;j++)
{
a[j]=1;
}
count=1;j=0;
a[0]=0;
while(count<n-1)
{
mark=0;key=1;
while(mark<i)
{
while(a[(j+key)%n]==0)
{
key=key+1;
}
mark++;
key++;
}
while(a[(j+key-1)%n]==0)
{
j++;
}
j=(j+key-1)%n;
a[j]=0;
count++;
}
if(a[1]!=0)
{
break;
}
}
return i;
}
int main()
{
int n;
while((scanf("%d",&n)!=EOF)&&(n!=0))
{
printf("%d\n",num(n));
}
return 0;
}