c++ 火柴棒等式

题目描述

给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示:
注意: 1. 加号与等号各自需要两根火柴棍 2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0) 3. n根火柴棍必须全部用上

输入

共一行,又一个整数n(n<=24)。

输出

共一行,表示能拼成的不同等式的数目。

样例输入

14

样例输出

2

Source Code

#include<bits/stdc++.h>
using namespace std;
int num[10001]={6,2,5,5,4,5,6,3,7,6};
int a[4],n,tmp,ans;
void dfs(int step,int sum)
{
    if(step == 3)
    {
        if(num[a[1] + a[2]] == n - sum) ans ++;
        return;
    }
    for(int i = 0;i <= 999;i ++)
        if(n - sum >= num[i])
        {
            a[step] = i;
            dfs(step + 1,sum + num[i]);
        }
}
int main()
{
    cin >> n;
    n = n - 4;
    for(int i = 10;i <= 9999;i ++)
    {
        tmp = i;
        while(tmp > 0)
        {
            num[i] += num[tmp % 10];
            tmp /= 10;
        }
    }
    dfs(1,0);
    printf("%d",ans);
    return 0;
}
posted @ 2019-08-12 14:14  牛大了的牛大  阅读(708)  评论(0编辑  收藏  举报