NOIP-火柴棒等式

时间:2023-03-08 19:21:01

题目描述

给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示:
NOIP-火柴棒等式

注意:

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[]={,,,,,,,,,};
int n,s=;
cin>>n;
n-=;
int i,j;
int x,y,z,a,b,c;
int flag1=,flag2=,flag3=;
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
x = i;
y = j;
z = x + y;
flag1=;
flag2=;
flag3=;
a=;b=;c=;
while(x) //注意数为0无法进入循环
{
a+=num[x%];
x/=;
flag1 = ;
}
if(flag1==)
a+=num[];
while(y)
{
b+=num[y%];
y/=;
flag2 = ;
}
if(flag2==)
b+=num[];
while(z)
{
c+=num[z%];
z/=;
flag3 = ;
}
if(flag3==)
c+=num[];
if(a+b+c==n)
{
s++;
} }
}
cout<<s;
}

总结

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