openjudge 火柴棒等式

8466:火柴棒等式

描述

给你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)。
输出
输出能拼成的不同等式的数目。
样例输入
5
样例输出
0
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int num[100],ans1,i,j,n,l;
int main()
{
	scanf("%d",&n);
	num[0]=6; num[1]=2; num[2]=5; num[3]=5; num[4]=4;
	num[5]=5; num[6]=6; num[7]=3; num[8]=7; num[9]=6;
	n-=4;
	if (n<9) 
	 {
	 	cout<<"0"<<endl; return 0;
	 }
	for (i=0;i<=1001;i++)
	 for (j=0;j<=i;j++)
	  {
	  	 int x=i-j;
	  	 char s1[10],s2[10],s3[10];
	  	 sprintf(s1,"%d",i);
	  	 sprintf(s2,"%d",j);
	  	 sprintf(s3,"%d",x);
	  	 int ans=0;
	  	 for (l=1;l<=strlen(s1);l++) 
	  	   ans+=num[s1[l-1]-48];
	  	 for (l=1;l<=strlen(s2);l++) 
	  	   ans+=num[s2[l-1]-48];
		 for (l=1;l<=strlen(s3);l++) 
	  	   ans+=num[s3[l-1]-48]; 
	  	 if (ans==n)  
	  	   ans1++;
	  }
	printf("%d",ans1);
	return 0;
}

你可能感兴趣的:(openjudge 火柴棒等式)