[NOIP2008 提高组] 火柴棒等式
题目描述
给你 \(n\) 根火柴棍,你可以拼出多少个形如 \(A+B=C\) 的等式?等式中的 \(A\)、\(B\)、\(C\) 是用火柴棍拼出的整数(若该数非零,则最高位不能是 \(0\))。用火柴棍拼数字 \(0\sim9\) 的拼法如图所示:
注意:
-
加号与等号各自需要两根火柴棍;
-
如果 \(A\neq B\),则 \(A+B=C\) 与 \(B+A=C\) 视为不同的等式(\(A,B,C\geq0\));
-
\(n\) 根火柴棍必须全部用上。
输入格式
一个整数 \(n(1 \leq n\leq 24)\)。
输出格式
一个整数,能拼成的不同等式的数目。
样例 #1
样例输入 #1
14
样例输出 #1
2
样例 #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\)。
题目分析
运用枚举的算法
因为n的范围是24,所以总火柴数不能超过24,因此,我们可以来计算一下用火柴棒能拼出的最大式子,由于1所使用的火柴棒的数量最少,所以我们用1来检测,减去加号与等号的火柴数量,总共有22根,经过手动计算,能得出“1111+1=1112”所用的火柴总共为25根,所以枚举的范围最大到1111。
接下来,就比较简单了,我们首先设一个数组,将0~9所用的火柴棒数量存入数组。
然后利用for循环和while循环嵌套计算出大于9小于2222的所有数字的火柴棒数量,调用数组,并存入数组。
最后判断出能用n拼出的火柴棒等式的数量并输出
最终代码