这题难道不高,关键在于思路,其实\(+\),\(=\)个占\(4\)个火柴棒,而他们是必须存在的,所以对火柴棒数\(-4\)就简单了,在枚举上,我们可以枚举\(2\)个数,第三个数就是a\(+b\)啦!根据只有\(20\)根火柴棒(删掉了\(=\)和\(+\)),我们能知道枚举数不会超过\(1111\),有些童鞋只枚举到了1000,难道是我错了???
注意全部火柴必须用上,该数非零,则最高位不能是\(0\)
Code
#include <iostream>
using namespace std;
int fun(int x) //用来计算一个数所需要的火柴棍总数
{
int num=0; //用来计数变量
int f[10]= {6,2,5,5,4,5,6,3,7,6}; //用一个数组记录0~9数字所需的火柴棍数
while(x/10!=0) // x除以10不等于0的话,说明该数至少有两位
{
num+=f[x%10]; //加上该位火柴棍数
x=x/10;
}
num+=f[x]; //加上最高位的火柴棍数
return num;
}
int main()
{
int a,b,c,m,sum=0;
cin>>m; //火柴棍总个数
for(a=0; a<=1111; a++) //开始枚举
{
for(b=0; b<=1111; b++)
{
c=a+b;
if(fun(a)+fun(b)+fun(c)==m-4) //去掉+和=
sum++;
}
}
cout<<sum<<endl;
return 0;
}
原文地址:https://www.cnblogs.com/lyfoi/p/9190300.html
时间: 2024-10-08 18:37:48