这题日了狗了,我以为是dp或者是找规律,我总觉得遍历会爆最后实在想不到只好百度了结果看了一
/*
ID:jinbo wu
TASK:runround
LANG:C++
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[20];
bool v[10];
bool judge(ll m)
{
memset(v,0,sizeof(v));
ll temp=m;
int l=1;
while(temp)
{
a[l++]=temp%10;
if(v[a[l-1]]||a[l-1]==0)
return false;
v[a[l-1]]=1;
temp/=10;
}
int k=1;
for(int i=l-1;i>=1;i--)
{
if(k==0)
k=l-1;
v[a[k]]=0;
k=(k+a[l-k])%(l-1);
}
int flag=1;
for(int i=1;i<l;i++)
if(v[a[i]])
{
flag=0;
break;
}
if(k==1&&flag)
return true;
return false;
}
int main()
{
freopen("runround.in","r",stdin);
freopen("runround.out","w",stdout);
ll n,ans;
scanf("%lld",&n);
for(ll i=n+1;;i++)
{
if(judge(i))
{
ans=i;
break;
}
}
printf("%lld\n",ans);
}
下说是模拟,那这题就不难了。直接模拟就好了