下面是题目复述:

给你 n 根火柴棍,你可以拼出多少个形如 "A+B=C" 的等式?等式中的 A、B、C 是用火柴棍拼出的整数(若该数非零,则最高位不能是 0)。

用火柴棍拼数字 0−9 的拼法如图所示:

alt

注意:

  1. 加号与等号各自需要两根火柴棍
  2. 如果 A不等于B,则 A+B=C 与 B+A=C 视为不同的等式(A、B、C≥0)
  3. n 根火柴棍必须全部用上。

输入格式

输入一个整数 n(n≤24)。

输出格式

输出能拼成的不同等式的数目。

Sample Input

5

Sample Output

0

分析过程:

  1. 火柴棒和数字联合数组是不错的选择,把每个数字需要的火柴棒都列举出来。
  2. 判断ab的取值范围,如果取111+1=112,一共20根不超数字范围,1111+1=1112为29根,超范围,可以直接定位为1000以内。
  3. 然后算每一位上面的火柴数然后比较就行了。

下面是AC代码:

#include <iostream>
#include<cstdio>

using namespace std;
int n;
int a[10]={6,2,5,5,4,5,6,3,7,6};
int shu(int x)
{
    int sum=0;
    while (x>9)
    {
        sum+=a[x%10];
        x/=10;
    }
    sum+=a[x];//防止个位是0没办法循环
    return sum;
}
int main()
{
    scanf("%d",&n);
    n-=4;
    int num=0;
    for(int i=0;i<1000;i++)
    {
        for(int j=0;j<1000;j++)//求求了别超时
        {
            int k=i+j;
            if(shu(i)+shu(j)+shu(k)==n)
                num++;
        }
    }
    printf("%d\n",num);
    return 0;
}