![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/70202c1d5855b2a0ef572bc8387a49f2.png#pic_center)
暴力
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=15;
int get_val(int l, int r);
void dfs(int u);
int n;
int res;
int num[N];
bool st[N];
signed main()
{
cin>>n;
dfs(0);
cout<<res<<endl;
}
void dfs(int u)
{
if(u==9)
{
for(int i=0;i<7;i++)
for(int j=i+1;j<8;j++)
{
int a=get_val(0, i);
int b=get_val(i+1, j);
int c=get_val(j+1, 8);
if(c*n==c*a+b) res++;
}
return;
}
for(int i=1;i<=9;i++)
if(!st[i])
{
num[u]=i, st[i]=true;
dfs(u+1);
st[i]=false;
}
}
int get_val(int l, int r)
{
int sum=0;
for(int i=l;i<=r;i++) sum=sum*10+num[i];
return sum;
}
优化
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
const int N=15;
bool judge(int a, int c);
void dfs_a(int u, int a);
void dfs_c(int u, int a, int c);
int n;
int res;
bool st[N], backups[N];
signed main()
{
cin>>n;
dfs_a(0, 0);
cout<<res<<endl;
}
bool judge(int a, int c)
{
LL b=(LL)c*n-(LL)c*a;
if(!a||!b||!c) return false;
memcpy(backups, st, sizeof st);
while(b)
{
int g=b%10;
b/=10;
if(!g||backups[g]) return false;
backups[g]=true;
}
for(int i=1;i<=9;i++) if(!backups[i]) return false;
return true;
}
void dfs_c(int u, int a, int c)
{
if(u==9) return;
if(judge(a, c)) res++;
for(int i=1;i<=9;i++)
if(!st[i])
{
st[i]=true;
dfs_c(u+1, a, c*10+i);
st[i]=false;
}
}
void dfs_a(int u, int a)
{
if(a>=n||u==9) return;
if(a) dfs_c(u, a, 0);
for(int i=1;i<=9;i++)
if(!st[i])
{
st[i]=true;
dfs_a(u+1, a*10+i);
st[i]=false;
}
}