火柴棍等式
来源:互联网 发布:linux下安装数据库 编辑:程序博客网 时间:2024/04/29 19:28
超超终于向他的女神小美表白了。可是小美只喜欢聪明的程序员,当场给他出了道难题,题目如下:给你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根火柴棍必须全部用上
超超分分钟就解出来了。
亲爱的小伙伴们,你们是不是也可以分分钟搞定这道难题呢?
Input
Output
Sample Input
18
Sample Output
9
Hint
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从1999的数表示所需的火柴棍存到另一个数组里。利用遍历求出你输入的火柴棍数量所能组成的等式。注意当A与B不同时可代表两个等式。
AC代码:#include<cstdio>#include<iostream>#include<cstdlib>using namespace std;int need[] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};int M[2000];int ans;int match(int cur){ int ans = 0, ret; if (cur == 0) { return 6; } while (cur > 0) { ret = cur % 10; ans += need[ret]; cur /= 10; } return ans;}void GetMatch(){ for (int i = 0; i <= 1999; ++i) { M[i] = match(i);
}}int main(){ int n = 24; scanf("%d", &n); GetMatch(); for (int i = 0; i <= 1000; i++) for (int j = i; j <= 1000; j++) { int a = M[i]; int b = M[j]; if (a + b > n - 6) { continue; } int d = M[i + j]; if (a + b + d + 4 == n && i != j) { ans += 2; } if (a + b + d + 4 == n && i == j) { ans++; } } printf("%d\n", ans); return 0;}
- noip火柴棍等式
- 火柴棍等式
- P1012火柴棍等式
- 火柴棍等式--枚举
- 火柴棍等式
- [Aha]火柴棍等式
- 3.3火柴棍等式
- 枚举-火柴棍等式
- 火柴棍等式
- 火柴棍等式
- 火柴棍等式
- 火柴棍等式
- 火柴棍的等式 算法
- NOIP 2008 火柴棍等式
- 暴力枚举之火柴棍等式
- 啊哈!算法—火柴棍等式
- [NOIP2008]火柴棒等式
- 1766. 火柴棒等式
- 用phpcms如何将静态页面制作成企业网站(中)
- RCNN系列学习笔记(3):Fast R-CNN
- BZOJ 3757 苹果树
- 基于RTMP推送实时AAC+H264流(二)
- fghhfh
- 火柴棍等式
- hrbust 1304 13哥的机器人
- iOS轮播的封装(直接使用)
- Android 6.0 主要特性
- 树莓派学习--底层GPIO开发
- B1042. 字符统计(20)
- bzoj1019: [SHOI2008]汉诺塔
- Excel做统计分析-入门
- java深入浅出解析异常机制