码迷,mamicode.com
首页 > 其他好文 > 详细

Luogu p1149 / Vijos p1496 火柴棒等式

时间:2018-03-27 23:00:40      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:lang   文件   ber   height   cpp   body   ring   vijos   不能   

给你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 火柴棒等式

标签:lang   文件   ber   height   cpp   body   ring   vijos   不能   

原文地址:https://www.cnblogs.com/yachen2018/p/8660728.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!