#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n;
bool vis[1005];
int nums[10] = {6,2,5,5,4,5,6,3,7,6};
int arr[25];
int cnt = 0;
int Nums(int n) {
if (n <= 9)return nums[n];
else {
int sum = 0;
while (n % 10 != 0) {
sum += nums[n % 10];
n = n / 10;
}
return sum;
}
}
void dfs(int x,int sum) {
if (x>3) {
if (arr[1] + arr[2] == arr[3] &&sum==n-4) {
cnt++;
for (int i = 1; i <= 3; i++)cout << arr[i] << " ";
cout << endl;
}
return;
}
if (sum > n - 4)return;
for (int i = 0; i <= n-4; i++) {
arr[x] = i;
dfs(x + 1,sum+Nums(i));
arr[x] = 0;
}
}
int main() {
cin >> n;
dfs(1,0);
cout << cnt;
return 0;
}
我在这个代码里加入了输出每次组合的功能,会发现总是多输出了几个超过火柴数的输出