下面是题目复述:
给你 n 根火柴棍,你可以拼出多少个形如 "A+B=C" 的等式?等式中的 A、B、C 是用火柴棍拼出的整数(若该数非零,则最高位不能是 0)。
用火柴棍拼数字 0−9 的拼法如图所示:
注意:
- 加号与等号各自需要两根火柴棍
- 如果 A不等于B,则 A+B=C 与 B+A=C 视为不同的等式(A、B、C≥0)
- n 根火柴棍必须全部用上。
输入格式
输入一个整数 n(n≤24)。
输出格式
输出能拼成的不同等式的数目。
Sample Input
5
Sample Output
0
分析过程:
- 火柴棒和数字联合数组是不错的选择,把每个数字需要的火柴棒都列举出来。
- 判断ab的取值范围,如果取111+1=112,一共20根不超数字范围,1111+1=1112为29根,超范围,可以直接定位为1000以内。
- 然后算每一位上面的火柴数然后比较就行了。
下面是AC代码:
#include <iostream>
#include<cstdio>
using namespace std;
int n;
int a[10]={6,2,5,5,4,5,6,3,7,6};
int shu(int x)
{
int sum=0;
while (x>9)
{
sum+=a[x%10];
x/=10;
}
sum+=a[x];//防止个位是0没办法循环
return sum;
}
int main()
{
scanf("%d",&n);
n-=4;
int num=0;
for(int i=0;i<1000;i++)
{
for(int j=0;j<1000;j++)//求求了别超时
{
int k=i+j;
if(shu(i)+shu(j)+shu(k)==n)
num++;
}
}
printf("%d\n",num);
return 0;
}