从M的下一个值递增搜索找出第一个比M大的循环数。及时终止对包括0或者有重复数字的整数的检测,检测过程可根据题目叙述进行模拟。本题比较简单,可是晚上一边看球一边作,通宵达旦,疲惫不堪,感受思惟混乱,通过屡次修改方才经过,可见晚上不可常常熬夜作题,尤为是熬到深夜甚至通宵,效率极低。不过这亦是一件极有趣的事,呼呼,洗洗睡了。ios
/* ID:jzzlee1 PROG:runround LANG:C++ Dear double_tings: i love you. */ //#include<iostream> #include<fstream> #include<cmath> #include<string> #include<cstring> using namespace std; ifstream cin("runround.in"); ofstream cout("runround.out"); int a[10],b[10],ii[10];; int main() { unsigned int x,ans; cin>>x; bool sign=1;int i; for(unsigned int k=x+1;sign;++k) { int n=0; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(ii,0,sizeof(ii)); unsigned int m=k; bool flag=0; while(m) { b[n]=m%10; if(!b[n]) { flag=1;break; } m/=10; ++n; } for(i=0;!flag&&i!=n;++i) for(int j=i+1;!flag&&j<n;++j) { if(b[i]==b[j]) { flag=1; } } if(flag) continue; for(i=0;i!=n;++i) a[i]=b[n-1-i]; int count;bool bb=1; for(count=0,i=0;bb;++count) { i=(i+a[i])%n; if(ii[i]) { bb=0; break; } else ii[i]=1; } if(count==n) { sign=0; ans=k; } } cout<<ans<<endl; return 0; }