题目描述
给你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;
}