暴力:求1~9的全排列。
对于每一个全排列,我们把全排列中的数分成3堆且每堆都不为空,则1~9中间有8个间隔。采取隔板法,8个间隔分
三堆有C(8,2)种方法。对于每个全排列,枚举这些分割方法,求出三个数。然后按照题目公式计算看是否等于数字N。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int main() {
int n;
while(~scanf("%d",&n)) {
int a[] = {1,2,3,4,5,6,7,8,9};
int ans = 0;
do {
int num1,num2,num3;
//第一段[0,i-1],第二段[i,j],第三段[j+1,8]
for(int i = 1; i < 8; i++) {
for(int j = i; j < 8; j++) {
num1=0;
num2=0;
num3=0;
for(int k = 0; k < i; k++) {
num1 = num1*10 + a[k];
}
for(int k = i; k <= j; k++) {
num2 = num2*10 + a[k];
}
for(int k = j+1; k <= 8; k++) {
num3 = num3*10 + a[k];
}
if(num2%num3==0) {
if(num2/num3 + num1 == n) {
ans++;
}
}
}
}
}while(next_permutation(a,a+9));
printf("%d\n",ans);
}
return 0;
}