https://www.acwing.com/problem/content/description/1211/
思路:先记录1-9的全排列,再双指针分割成三个数如果满足,结果加一
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[20],vis[20],ans=0,n;
int cal(int l,int r){
int res=0;
for(int i=l;i<=r;i++) res=res*10+a[i];
return res;
}
void dfs(int pos){
if(pos>9){
for(int i=1;i<=9;i++){
for(int j=i+1;j<=9;j++){
int x=cal(1,i);
int y=cal(i+1,j);
int z=cal(j+1,9);
if(x*z+y==n*z)ans++;
}
}
}
for(int i=1;i<=9;i++){
if(!vis[i]){
vis[i]=true;
a[pos]=i;
dfs(pos+1);
vis[i]=false;
}
}
}
signed main(){
cin>>n;
dfs(1);
cout<<ans<<'\n';
return 0;
}