[洛谷P1149]火柴棒等式

这题难道不高,关键在于思路,其实\(+\)\(=\)个占\(4\)个火柴棒,而他们是必须存在的,所以对火柴棒数\(-4\)就简单了,在枚举上,我们可以枚举\(2\)个数,第三个数就是a\(+b\)啦!根据只有\(20\)根火柴棒(删掉了\(=\)\(+\)),我们能知道枚举数不会超过\(1111\),有些童鞋只枚举到了1000,难道是我错了???

注意全部火柴必须用上,该数非零,则最高位不能是\(0\)

Code

#include <iostream>
using namespace std;
int fun(int x)    //用来计算一个数所需要的火柴棍总数
{
    int num=0;  //用来计数变量
    int f[10]= {6,2,5,5,4,5,6,3,7,6};  //用一个数组记录0~9数字所需的火柴棍数
    while(x/10!=0)     // x除以10不等于0的话,说明该数至少有两位
    {
        num+=f[x%10];   //加上该位火柴棍数
        x=x/10;
    }
    num+=f[x];     //加上最高位的火柴棍数
    return num;
}
int main()
{
    int a,b,c,m,sum=0;
    cin>>m;        //火柴棍总个数
    for(a=0; a<=1111; a++) //开始枚举
    {
        for(b=0; b<=1111; b++)
        {
            c=a+b;
            if(fun(a)+fun(b)+fun(c)==m-4)  //去掉+和=
                sum++;
        }
    }
    cout<<sum<<endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/lyfoi/p/9190300.html
今日推荐