解析:本题的火柴数有范围限制(n<=24),所以可以大致判断加数的范围在1000以内,那么我们只需要遍历2000以内的加法算数,并将符合标准的记录下来即可。
先保存2000以内各数所需的火柴数量,然后再遍历加法算式,还要注意i=j与i!=j的区别。
#include <bits/stdc++.h>
using namespace std;
int main()
{
array<int,2001> arr= {6,2,5,5,4,5,6,3,7,6};
long long total = 0;
for(int i = 10 ; i <= 2000 ; i++)
{
int j;
j = i;
while(j >= 1)
{
arr[i] += arr[j % 10];
j = j / 10;
}
}
int n;
cin>>n;
for(int i = 0; i <= 1000 ; i++)
{
for(int j = i ; j <= 1000 ; j++)
{
if(arr[i] + arr[j] + 4 + arr[i+j] == n)
{
if(i == j)
{
total++;
}
else{
total+=2;
}
}
}
}
cout<<total<<endl;
return 0;
}