思路:将数字转换为火柴棒个数,两层循环遍历a和b,如果符合func(a)+func(b)+func(a+b)==n则记录一次
#include<bits/stdc++.h>
using namespace std;
const int MAXNUM = 1000;
int func(int n) {//将数字转换为火柴棒个数
int x[10] = { 6,2,5,5,4,5,6,3,7,6 };//记录每个数字的火柴棒个数
int sum = 0;
if (n == 0)return x[0];//特判
while (n) {//从最低位到最高位计算火柴棒个数
sum += x[n % 10];
n /= 10;
}
return sum;
}
int main()
{
int n;
cin >> n;
n -= 4;//出去加号和等号
int cnt = 0;//计数
for(int a=0;a<MAXNUM;a++)
for(int b=0;b<=a;b++)
if (func(a) + func(b) + func(a + b)==n) {
if (a == b)cnt++;//ab相等算一次
else cnt += 2;//ab不等算两个
}
cout << cnt;
return 0;
}