描述
给你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)。
输出格式
输出共一行,表示能拼成的不同等式的数目。
样例1
样例输入1
14
样例输出1
2
样例2
样例输入2
18
样例输出2
9
限制
1s
提示
【输入输出样例1解释】
2个等式为0+1=1和1+0=1。
【输入输出样例2解释】
9个等式为:
0+4=4
0+11=11
1+10=11
2+2=4
2+7=9
4+0=4
7+2=9
10+1=11
11+0=11
来源
NOIP2008提高组第二题。
1 /* 2 不需要搜索 3 只需要枚举就好了 4 注意24根火柴可以拼出3位数 5 */ 6 #include<cstdio> 7 #include<iostream> 8 9 using namespace std; 10 11 int n,ans; 12 13 int a[10]= {6,2,5,5,4,5,6,3,7,6}; 14 15 inline int f(int x) { 16 int _ans=0; 17 do { 18 _ans+=a[x%10]; 19 x/=10; 20 }while(x); 21 return _ans; 22 } 23 24 int main() { 25 scanf("%d",&n); 26 n-=4; 27 for(int i=0;i<=1000;i++) 28 for(int j=0;j<=1000;j++) { 29 int _ans=f(i)+f(j)+f(i+j); 30 if(_ans==n) ans++; 31 } 32 printf("%d ",ans); 33 return 0; 34 }