因为题目说了位数是在1~9之间,直接用dfs构造出所有的数判断一下就可以搞出来了
#include<iostream>
#include<string>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
long long n;
int visit[101000],cur[10];
bool check(int maxx)
{
int i=0;int f[9];
long long x=0;
memset(f,0,sizeof(f));
while(!f[0])
{
i=(i+cur[i])%maxx;
if (f[i]) return 0;
f[i]=1;
}
for (int i=0;i<maxx;i++)
{
if (!f[i]) return 0;
x=x*10+cur[i];
}
if (x<=n) return 0;
return 1;
}
void dfs(int maxx,int depth)
{
if (depth>=maxx)
{
if (check(maxx))
{
for (int i=0;i<depth;i++) printf("%d",cur[i]);
exit(0);
}
return;
}
for (int i=1;i<=9;i++)
{
if (!visit[i])
{
visit[i]=1;
cur[depth]=i;
dfs(maxx,depth+1);
visit[i]=0;
}
}
}
int main()
{
scanf("%lld",&n);
for (int i=1;i<=10;i++) dfs(i,0);
return 0;
}