利用打表来节省时间,约瑟夫问题的变体;
#include<stdio.h>
int result[1000]={0};
bool text(int k,int m)
{
int i,t=0,curr=2*k;//sum people
for(i=1;i<=k;i++)
{
t=(t+m-1)%curr;
curr--;
if(t<k)return false;
}
return true;
}
void db()
{
int k,m;
for(k=1;k<14;k++)
for(m=k+1;;m++)
if(text(k,m)==true)
{
result[k-1]=m;
break;
}
}
int main()
{
int k;
db();
while(scanf("%d",&k)!=EOF){
printf("%d\n",result[k-1]);
}
}