• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Niro Einteson
文可提笔安天下 武可上马定乾坤
博客园    首页    新随笔    联系   管理    订阅  订阅

P1149 火柴棒等式

P1149 火柴棒等式

题目描述

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

注意:

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

  2. 如果A≠B  则A+B=C 与B+A=C 视为不同的等式(A,B,C>=0 )

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

输入格式

一个整数n(n<=24)。

输出格式

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

输入输出样例

输入 
14
输出
2
输入 
18
输出 
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
 1 n最大为24,减去4根用于等号和加号,剩下的20根,
 2 分给因子 和   和,所以因子最多用8根,就是1111 
 3 1111+1=1112-->最大用了25个超过24个
 4 
 5 解法:
 6 
 7 #include<bits/stdc++.h>
 8 using namespace std;
 9 map<int,int> mp;
10 int cnt(int x)     //一个用来计算一个数需多少个火柴棒的函数
11 {
12     if(mp[x]) return mp[x];//已经计算过了,可以返回了
13     if(x==0) return mp[0]; //将这个数字每一位的火柴棒的数量都计算出来
14     int tmp=x,sum=0;
15     while(tmp!=0){
16         sum+=mp[tmp%10];
17         tmp/=10;
18     }
19     return sum;
20 }
21 int main()
22 {
23     int i,j,Sum=0,n;    //sum是符合条件的
24     cin>>n;
25     for(int i=0;i<=2222;i++){//存到 数据里面
26         if(i==0||i==6||i==9) mp[i]=6;
27         else if(i==1) mp[i]=2;
28         else if(i==2||i==3||i==5)mp[i]=5;
29         else if(i==4) mp[i]=4;
30         else if(i==7) mp[i]=3;
31         else if(i==8) mp[i]=7;
32         else mp[i]=cnt(i);
33         cout<<i<<" "<<mp[i]<<" "<<endl;
34     }
35     for(i=0; i<=1000; i++)//暴力查找
36         for(j=0; j<=1000; j++)
37            if(mp[i]+mp[j]+mp[i+j]+4==n)
38                 Sum++;
39     cout<<Sum<<endl;
40     return 0;
41 }

 



posted @ 2019-12-14 19:54  Nirogo  阅读(265)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3