Luogu p1149 / Vijos p1496 火柴棒等式

本文探讨了使用有限数量的火柴棍拼出形如“A+B=C”的等式的算法实现。通过预先计算数字0到9所需的火柴数,并采用循环判断的方式找出所有可能的等式组合。

给你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 }

 

 

转载于:https://www.cnblogs.com/yachen2018/p/8660728.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值