zoukankan      html  css  js  c++  java
  • noip200806火柴棒等式

    试题描述: 

       给你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)。

    输出:

    共一行,表示能拼成的不同等式的数目。

    输入示例:

    【输入样例1】14
    【输入样例2】18

    输出示例:

    【输出样例1】2
    【输出样例2】9

    解题思路:

    先打一个表,然后就是模拟。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    using namespace std;
    int n;
    int main()
    {
        int need[10010];
        memset(need,250,sizeof(need));
        need[0]=6;
        need[1]=2;
        need[2]=5;
        need[3]=5;
        need[4]=4;
        need[5]=5;
        need[6]=6;
        need[7]=3;
        need[8]=7;
        need[9]=6;
        cin>>n;
        for(int i=10;i<=999;i++)
        {
            char c[4];
            sprintf(c,"%d",i);
            int l=strlen(c);
            //cout<<l<<" ";
            need[i]=0;
            for(int j=0;j<l;j++)
            {
                int a=c[j]-'0';
                need[i]+=need[a];
            }
        }
        n=n-4;
        int ans=0;
        for(int i=0;i<999;i++)
            for(int j=0;j<999;j++)
            {
                int k=i+j;
                if(need[i]+need[j]+need[k]==n)
                {
                    ans++;
                    //cout<<i<<"+"<<j<<"="<<k<<endl;
                }
            }
        cout<<ans;
        //system("pause");
    }
    /*111+111=222*/
    View Code
  • 相关阅读:
    set, unordered_set模板类
    C/C++ Bug记录
    win10远程连接
    C/C++缓冲区刷新问题
    hihocoder1711 评论框排版[并查集+set]
    makefile
    Virtual Table
    粤语
    xilinx SDK开发 GPIO使用API总结
    基于zynq 7020的串口UART中断实验
  • 原文地址:https://www.cnblogs.com/jason2003/p/7169599.html
Copyright © 2011-2022 走看看