从M的下一个值递增搜索找出第一个比M大的循环数。及时终止对包括0或者有重复数字的整数的检测,检测过程可根据题目叙述进行模拟。本题比较简单,但是晚上一边看球一边做,通宵达旦,疲惫不堪,感觉思维混乱,经过多次修改方才通过,可见晚上不可经常熬夜做题,尤其是熬到深夜甚至通宵,效率极低。不过这亦是一件极有趣的事,呼呼,洗洗睡了。
/*
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;
}