P1149 [NOIP2008 提高组] 火柴棒等式
题目描述
给你 nn根火柴棍,你可以拼出多少个形如 A+B=C的等式?等式中的 A、B、C是用火柴棍拼出的
整数(若该数非零,则最高位不能是 0)。用火柴棍拼数字 0∼9 的拼法如图所示:

注意:
-
加号与等号各自需要两根火柴棍;
-
如果A ≠ B,则 A+B=C 与 B+A=C B+A=C 视为不同的等式(A,B,C\geq0A,B,C≥0);
-
n根火柴棍必须全部用上.
输入格式
一个整数 n(1 \leq n\leq 24)n(1≤n≤24)。
输出格式
一个整数,能拼成的不同等式的数目。
根据上图可知,0到9 十个数所用的火柴数量分别是6,2,5,5,4,5,6,3,7,6;
即:

但是10及其以上的数该怎么表示呢?
火柴总数就只看一个数外表的组成,就拿11来说吧,十位是1,个位也是,所用火柴数就是1的两倍,即4;
以此类推:
可以作一函数:

这里一定要做到四位数(其实计算到1111就行),不然会计算不全;
要求拼出的等式是A+B=C;
"+"和"="都各需2根,共四根,所以能够拼A、B、C的火柴总数为n-2
每次等式成立的条件为
2.A和B的火柴总数=C的火柴总数
我们知道一个数时准确能计算出它的火柴数,但是只知道一个数的火柴数不能准确算出这是哪个数;
所以我选择两层循环枚举A、B的值,求出C,最后验证火柴是否刚好用完。
最后代码如下:

浙公网安备 33010602011771号