洛谷习题 P1149 火柴棒等式 个人 1

这一题我主要的思路就是从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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值