现在的位置: 首页 > 综合 > 正文

暴力枚举之火柴棍等式

2018年04月29日 ⁄ 综合 ⁄ 共 720字 ⁄ 字号 评论关闭
/*
    有是一道有关暴力枚举的题目,其实题目很简单,就是给你m根火柴,看你能摆出来多少
    个逻辑上成立的加法等式,不难发现,去掉+和=就只剩下了m-4根火柴来组成数字了,
    那么我们只需要依次枚举A,B,C就可以达到要求了,为了减少时间的复杂度,我们只要
    枚举两个变量A,B就好C的枚举可以通过A+B得到,那么我们就很容易的发现,时间复杂度
    由原来的O(n3)-> O(n2)了,好了好了,开始枚举吧,这里有个小小的技巧,就是自己
    写一个fun()函数,这个函数的作用当然就是数火柴了,也就是说,把A,B,C所需要的
    火柴个数一个一个的算出来了,这个其实也很简单,就是和我们先前C上机时用到的输入
    一个数字,计算这个数字的位数的思想是一样的,只不过这里的1不再是1,而是通过一个
    简单的映射得到了一个新的数字,1->2,0->6,3->5,4->4,,,,然后一一匹配就好。


*/



# include<cstdio>
# include<iostream>

using namespace std;

int f[10] = {6,2,5,5,4,5,6,3,7,6};

int fun( int x )
    {
        int num = 0;
        while ( x/10 > 0 )
            {
                num+=f[x%10];
                x/=10;
            }
            num += f[x];
            return num;
    }


int main(void)
{
    int a,b,c;
    int m;cin>>m;
    int sum = 0;

    for ( int a = 0;a <= 1111;a++ )
        {
            for ( int b = 0;b <= 1111;b++ )
                {
                    c = a+b;
                            if ( fun(a)+fun(b)+fun(c) == m-4 )
                                {
                                    cout<<a<<"+"<<b<<"="<<c<<endl;
                                    sum++;
                                }

                }
        }
        cout<<sum<<endl;


}

【上篇】
【下篇】

抱歉!评论已关闭.