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,最后验证火柴是否刚好用完。
最后代码如下:

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理