0
点赞
收藏
分享

微信扫一扫

P1149 火柴棒等式


题目描述

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

P1149 火柴棒等式_ios

注意:

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

输入输出格式

输入格式:

 

一个整数n(n<=24)。

 

输出格式:

 

一个整数,能拼成的不同等式的数目。

 

输入输出样例

输入样例#1: 复制


14


输出样例#1: 复制


2


输入样例#2: 复制


18


输出样例#2: 复制


9


说明

【输入输出样例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

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <set>
#include <cstring>
#include <stack>
#include <queue>
#define Swap(a,b) a ^= b ^= a ^= b
using namespace std ;
const int MAX = 105;
const int inf = 0xffffff;
const int mod = 1e9+7 ;
typedef long long LL;
int minn = 0x3f3f3f3f ;
int maxx = -0x3f3f3f3f;
int ans ;
// --------------------------------
LL gcd(LL a , LL b)
{
return b== 0 ? a : gcd(b,a%b) ;
}
int f[10] ;

int trans(int i )
{
int k = i ;
int sum = 0 ;
if(i <=9 )
{
return f[i] ;
}
else
{
while(k)
{
sum+=f[k%10] ;
k/=10;
}

}
return sum ;
}
int main()
{
f[0] = 6 ,f[1] = 2 ,f[2] = 5 ;
f[3] = 5 ,f[4] = 4 ,f[5] = 5 ;
f[6] = 6 ,f[7] = 3 ,f[8] = 7 ;
f[9] = 6 ;
int n ;
cin >>n ;

for(int i = 0 ; i<=1000 ; i++)
{
for(int j = 0 ;j<=1000 ;j ++ )
{
int w = trans(i) + trans(j);
int l = trans(i+j) ;
if(w + l == n-4)
{
ans ++ ;
}


}
}
// cout<<trans(n)<<endl;
cout<<ans<<endl;

return 0 ;
}

 

举报

相关推荐

0 条评论