暴力枚举1~9的全排列,然后插入两个挡板(i, j)使得分成三个部分,再将每个部分转换成对应的十进制数,最后判断这三个数能否达到题目要求的等式,若满足条件,方案数+1。
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
const int N = 20;
int num[N];
int target;
int calc(int l, int r)
{
int res = 0;
for (int i = l; i <= r; ++ i)
res = res * 10 + num[i];
return res;
}
int main()
{
scanf("%d", &target);
for (int i = 0; i < 9; ++ i) num[i] = i + 1;
int res = 0;
do {
for (int i = 0; i < 9; ++ i)
{
for (int j = i + 1; j < 9; ++ j)
{
int a = calc(0, i);
int b = calc(i + 1, j);
int c = calc(j + 1, 8);
if (!a || !b || !c) continue;
if (a * c + b == c * target) res ++;
}
}
} while (next_permutation(num, num + 9));
printf("%d\n", res);
return 0;
}