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

题目描述

给你 nn根火柴棍,你可以拼出多少个形如 A+B=C的等式?等式中的 ABC是用火柴棍拼出的

整数(若该数非零,则最高位不能是 0)。用火柴棍拼数字 09 的拼法如图所示:

注意:

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

  2. 如果A ≠ B,则 A+B=C 与 B+A=C B+A=C 视为不同的等式(A,B,C\geq0A,B,C0);

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

输入格式

一个整数 n(1 \leq n\leq 24)n(1n24)。

输出格式

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

根据上图可知,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

每次等式成立的条件为

  1.三个数符合A+B=C;
  2.A和B的火柴总数=C的火柴总数
       我们知道一个数时准确能计算出它的火柴数,但是只知道一个数的火柴数不能准确算出这是哪个数;
  所以我选择两层循环枚举A、B的值,求出C,最后验证火柴是否刚好用完。
 
 
  最后代码如下:

 

 

 

 

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