P1149 [NOIP2008 提高组] 火柴棒等式 题解

[NOIP2008 提高组] 火柴棒等式

题目描述

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

注意:

  1. 加号与等号各自需要两根火柴棍;

  2. 如果 AB,则 A+B=CB+A=C 视为不同的等式(A,B,C0);

  3. n 根火柴棍必须全部用上。

输入格式

一个整数 n(1n24)

输出格式

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

样例 #1

样例输入 #1

14

样例输出 #1

2

样例 #2

样例输入 #2

18

样例输出 #2

9

提示

【输入输出样例 1 解释】

2 个等式为 0+1=11+0=1

【输入输出样例 2 解释】

9 个等式为

0+4=40+11=111+10=112+2=42+7=94+0=47+2=910+1=1111+0=11

题目分析

运用枚举的算法

因为n的范围是24,所以总火柴数不能超过24,因此,我们可以来计算一下用火柴棒能拼出的最大式子,由于1所使用的火柴棒的数量最少,所以我们用1来检测,减去加号与等号的火柴数量,总共有22根,经过手动计算,能得出“1111+1=1112”所用的火柴总共为25根,所以枚举的范围最大到1111。
接下来,就比较简单了,我们首先设一个数组,将0~9所用的火柴棒数量存入数组。
然后利用for循环和while循环嵌套计算出大于9小于2222的所有数字的火柴棒数量,调用数组,并存入数组。
image
最后判断出能用n拼出的火柴棒等式的数量并输出
image
最终代码

做题中一定要注意第一个for循环中的i和数组一定要大于第二个for循环i+j的总值

毛桃不易 严禁抄袭

posted @   zzrlmt  阅读(100)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示