题目大意:
给你一个数据n,组成一个环,从1开始取,后移m个再取一个,要保证最后取得数是2;
(约瑟夫环问题)
#include <stdio.h>
#include <stdlib.h>
int ans[150];
void f()
{
int i,j,m;
for(i=3;i<150;i++)
{
m=1;
while(1)
{
int tmp=1;
for(j=2;j<i;j++)
{
tmp=(tmp+m)%j;
if(tmp==0)
tmp=j;
}
if(tmp==1)//最后只余出一个值
{
ans[i]=m;
break;//计算出每一次的n的m值
}
m++;
}
}
}
int main()
{
int n;
f();
while(scanf("%d",&n))
{
if(!n)break;//输入为0时停止
printf("%d\n",ans[n]);
}
}