输入样例:
100
输出样例:
11
分析:本题是关于数字的深搜问题
代码演示:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 12;
int n;
int num[N]; // 存储某一层的数
bool used[N];
int cnt;
// 控制形成一个数
int calc(int l,int r)
{
int res = 0;
for(int i=l;i<=r;i++)
{
res = res*10+num[i];
}
return res;
}
void dfs(int u)
{
// 1~9的数字都用上了
if(u==9)
{
for(int i=0;i<7;i++)
{
for(int j=i+1;j<8;j++)
{
int a = calc(0,i);
int b = calc(i+1,j);
int c = calc(j+1,8);
if(a==0||b==0||c==0) continue;
// 将条件变化一下
if(a*c+b==n*c) cnt++;
}
}
return;
}
for(int i=1;i<=9;i++)
{
if(!used[i])
{
used[i] = true;
num[u] = i;
dfs(u+1);
used[i] = false;
}
}
}
int main(void)
{
scanf("%d",&n);
dfs(0);
cout << cnt << endl;
return 0;
}