/* 大致题意:n个城市,先把1号断电,继而每隔m断电使标号为2的最后被限电; 转化为(n-1)个城市,最后断电的为标号为1的城市,求最小的m */ #include<stdio.h> bool is_joseph(int m,int n) { int i,j; int s=0; for(i=2;i<=n;i++) s=(s+m)%i; if((s+1)==1) return 1; return 0; } int main() { int i,j,k; int m,n,s; while(scanf("%d",&n),n) { /* 加 不加else, 因为执行m++后,m又变成了2 都成死循环啦 while(1) { m=2; if(is_joseph(m,n-1)) break; else m++; } printf("%d\n",m); */ m=2; while(1) { if(is_joseph(m,n-1)) { printf("%d\n",m); break; } else m++; } } return 0; }