zl程序教程

您现在的位置是:首页 >  其他

当前栏目

NOIP2015年普级组试题 火材棒等式

2023-09-27 14:28:27 时间

NOIP2015年普级组试题 火材棒等式

题目

给你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根火柴棍必须全部用上

输入

输入文件matches.in共一行,又一个整数n(n<=24)。

输入样例1

14

输入样例2

18

输出

输出文件matches.out共一行,表示能拼成的不同等式的数目。

输出样例1

2

输出样例2

9

输入输出样例1解释

2个等式为0+1=1和1+0=1。

输入输出样例2解释

9个等式为: 0+4=4 0+11=11 1+10=11 2+2=4 2+7=9 4+0=4 7+2=9 10+1=11 11+0=11

思路

你先求出每一个数字(1~1001)所要用的火柴棒数,再把每一种可能性枚举出来,只要成立sum就加一。最后只要输出sum就OK了。

代码

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
	int sum=0,n,a[1001]={6,2,5,5,4,5,6,3,7,6};//初始化
	scanf("%d",&n);//读入
	n-=4;//把加号和等号所要用的火材棒数减去
	for (int i=10;i<=1001;i++) 
	a[i]=a[i%10]+a[i/10];//求出每个数字所要用的火材棒数
	for (int i=0;i<=1001;i++)
	for (int j=0;j<=1001;j++)
	{
	if (a[i]+a[j]+a[i+j]==n&&i+j<1000) sum++;//把每一种可能枚举出来,如果成立就加一
	}
	printf("%d",sum);//输出
	return 0;
}