这一题我主要的思路就是从0+0开始算起,两个加数一起加一,然后包括结果在内算出其所需的火柴数,并与所拥有的火柴数相比是否吻合
#include<iostream>
using namespace std;
bool jishu(int y[10], int x1, int y1, int z1, int flag1)//判断该等式所需的火柴数是否足够
{
int sum1=0;//判断现在等式所需要的火柴数
do
{
sum1 += y[x1 % 10];//第一个加数所需的火柴数
x1 /= 10;
} while (x1 != 0);//每个数字都记录一次
do
{
sum1 += y[y1 % 10];//第二个加数所需的火柴数
y1 /= 10;
} while (y1 != 0);//每个数字都记录一次
do
{
sum1 += y[z1 % 10];//和所需的火柴数
z1 /= 10;
} while (z1 != 0);//每个数字都记录一次
if (flag1 == sum1)//判断所需的火柴数与所所拥有的火柴数是否相同
return 1;//相同返回1
else
return 0;//不相同返回0
}
int main()
{
int n, x[10] = { 6,2,5,5,4,5,6,3,7,6 };//每个数字需要的火柴
int sum=0;
cin >> n;//输入火柴数
if (n < 10)
cout << 0;//当火柴数不足时
else
{
int flag = n - 4;//减去加号和等号的火柴数
int a, b, c;//设定两个加数和和
for (a = 0; a < 1001; a++)
for (b = 0; b < 1001; b++)
{
c = a + b;
if (jishu(x, a, b, c, flag) != 0)//当等式成立并且火柴总数刚好时
sum++;//成立条数加1
}
cout << sum;//输出成立条数
}
return 0;
}