zoukankan      html  css  js  c++  java
  • [NOIP2008] 提高组 洛谷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根火柴棍必须全部用上

    输入输出格式

    输入格式:

    输入文件matches.in共一行,又一个整数n(n<=24)。

    输出格式:

    输出文件matches.out共一行,表示能拼成的不同等式的数目。

    输入输出样例

    输入样例#1:
    样例输入1:
    14
    样例输入2:
    18
    输出样例#1:
    样例输出1:
    2
    样例输出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

    打表列出每个数字需要的火柴棒数量。枚举两个加数看能否满足式子即可。

    加数要循环枚举到1100左右。

     1 /*by SilverN*/
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<cmath>
     7 #include<vector>
     8 using namespace std;
     9 const int mxn=100010;
    10 const int a[10]={6,2,5,5,4,5,6,3,7,6};
    11             //     0 1 2 3 4 5 6 7 8 9
    12 int n;
    13 int gt(int x){
    14     if(!x)return a[0];
    15     int res=0;
    16     while(x){ res+=a[x%10]; x/=10; }
    17     return res;
    18 }
    19 int main(){
    20     cin>>n;
    21     int i,j;
    22     int cnt=0;
    23     for(i=0;i<=1100;i++)
    24      for(j=0;j<=1100;j++){
    25          int r=i+j;
    26          int bas=4;//+ =
    27          if(gt(i)+gt(j)+bas+gt(r)==n)cnt++;
    28      }
    29     cout<<cnt<<endl;
    30     return 0;
    31 }
  • 相关阅读:
    [Java123] JDBC and Multi-Threading 多线程编程学习笔记
    3:2D装换 [ 重点 ]
    2:属性选择器 + 结构伪类选择器 + 伪元素
    1:新增 H5 常用属性
    day2
    代码实操第一天
    1 滑动门
    css高级技巧
    11:网页布局总结
    10:定位
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/6026167.html
Copyright © 2011-2022 走看看