NOIP-火柴棒等式

题目描述

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

输出描述:

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

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    int num[10]={6,2,5,5,4,5,6,3,7,6};
    int n,s=0;
    cin>>n;
    n-=4;
    int i,j;
    int x,y,z,a,b,c;
    int flag1=0,flag2=0,flag3=0;
    for(i=0;i<=1000;i++)
    {
        for(j=0;j<=1000;j++)
        {
            x = i;
            y = j;
            z = x + y;
            flag1=0;
            flag2=0;
            flag3=0;
            a=0;b=0;c=0;
            while(x)    //注意数为0无法进入循环
            {
                a+=num[x%10];
                x/=10;
                flag1 = 1;
            }
            if(flag1==0)
            a+=num[0];
            while(y)
            {
                b+=num[y%10];
                y/=10;
                flag2 = 1;
            }
            if(flag2==0)
            b+=num[0];
            while(z)
            {
                c+=num[z%10];
                z/=10;
                flag3 = 1;
            }
            if(flag3==0)
            c+=num[0];
            if(a+b+c==n)
            {            
                s++;
            }
            
        }    
    }    
    cout<<s;
 } 

总结

根据题目规定的24根火柴估计等式的大概取值范围(1000以内),用循环枚举两个加数,再看等式火柴数是否符合条件

猜你喜欢

转载自www.cnblogs.com/miliye/p/10274159.html