1012的弱化版,这题由于先把编号为1的城市删掉了,我们原来编号为2的目标城市也就变成了1号,总数变成了n-1 如果这题目标不是1,我想可以做:如果next的编号比目标编号小,则目标编号减1即可 代码: #include<iostream> #include<memory.h> #include<string> #include<cstdio> #include<algorithm> #include<math.h> #include<stack> #include<queue> using namespace std; int f[150]; bool go(int n,int m,int target) { int now,next,b; now=b=0; while(true) { next=(now+m-1)%(n-b)+1; b++; if(next==target) { if(b<n) return false; else return true; } now=next-1; } } int main() { int i,j,n,m; memset(f,0,sizeof(f)); while(scanf("%d",&n)!=EOF) { if(!n) break; if(f[n]) { cout<<f[n]<<endl; continue; } for(m=1;;m++) { //cout<<m<<endl; if(go(n-1,m,1)) { f[n]=m; break; } } cout<<f[n]<<endl; } return 0; }