Luogu p1149 / Vijos p1496 火柴棒等式

Posted yachen2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Luogu p1149 / Vijos p1496 火柴棒等式相关的知识,希望对你有一定的参考价值。

给你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根火柴棍必须全部用上

输入输出格式

输入格式:

 

输入文件matches.in共一行,又一个整数n(n<=24)。

 

输出格式:

 

输出文件matches.out共一行,表示能拼成的不同等式的数目。

 

输入输出样例

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

 

 思路:去计算每个数需要的火柴数,再去循环判断比较简便

 

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int a[10]={6,2,5,5,4,5,6,3,7,6};
 5 
 6 int main() {
 7     int i,len,j,n,cnt;
 8     char s[10];
 9     int b[2010];
10     for (i=0;i<10;i++) b[i]=a[i];
11     for (i=10;i<2010;i++) {
12         sprintf (s,"%d",i);
13         len=strlen(s);
14         b[i]=0;
15         for (j=0;j<len;j++) {
16             b[i]+=a[s[j]-48];
17         }
18     }
19     scanf ("%d",&n);
20     n-=4;
21     cnt=0;
22     for (i=0;i<1000;i++) {
23         for (j=0;j<1000;j++) {
24             if (b[i]+b[j]+b[i+j]==n) {
25                 cnt++;
26             }
27         }
28     }
29     printf ("%d\n",cnt);
30     return 0;
31 }

 

 

以上是关于Luogu p1149 / Vijos p1496 火柴棒等式的主要内容,如果未能解决你的问题,请参考以下文章

luogu P1149 火柴棒等式

vijos p1980斗地主/luogu p2540斗地主增强版

建图最短路同余(luogu2662 vijos1054 xjoi2157)

NOIP 车站分级 (luogu 1983 & codevs 3294 & vijos 1851) - 拓扑排序 - bitset

洛谷 P1496 火烧赤壁

洛谷—— P1036 选数 || Vijos——选数