一个数,它的每个数字互不相同且均不为0,从它的首位出发。若当前位的数字为x,下一次往后数x位。若每个数字都到过一次后,又回到了首位,则该数即为所求数。
求m后第一个这样的数。
审题很关键啊!!!
第一次提交没看到“每个数字都到过一次后”,第二次提交没看到“它的每个数字互不相同且均不为0”。无语了。。。
这题不用想多,直接暴力枚举。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline int read(){
int x=0;char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x;
}
int a[15];
int main()
{
freopen("runround.in","r",stdin);
freopen("runround.out","w",stdout);
ll n=read(),x=n+1;
while(1){
ll t=x,s=0;
set<int> b;
while(t!=0) ++s,b.insert(t%10),t/=10;
if(*b.begin()==0||b.size()!=s){
++x;
continue;
}
t=x;
for(int i=s;i;--i) a[i]=t%10,t/=10;
t=1;
for(int i=1;i<=s;++i){
t=(t+a[t]-1)%s+1;
if(i<s&&t==1){
t=2;
break;
}
}
if(t==1){
printf("%lld\n",x);
return 0;
}
++x;
}
}