暴力枚举 洛谷1149 火柴棒等式

目录

题目描述: 

输入输出示范:

​ 

源代码:

分析思路:


 

题目描述: 

 

输入输出示范:

 

源代码:

#include<iostream>
#include<string.h>
using namespace std;
const int num[10] = { 6,2,5,5,4,5,6,3,7,6 };
//十个数字要用到的火柴棒根数,下标表原数字
bool tag[111];
int total = 4;//总用去火柴棒
void add(int x)//三种添加方式
{
	if (x >= 100)
		total += (num[x / 100] + num[x % 100 / 10] + num[x % 10]);
	else if (x >= 10 && x < 100)
		total += (num[x % 100 / 10] + num[x % 10]);
	else
		total += num[x];
}
int main()
{
	memset(tag, true, sizeof(tag));
	int n, ans = 0;
	cin >> n;
	for(int i=0;i<1000;++i)
		for (int j = 0; j <1000; ++j)
		{
			add(i);
			add(j);
			add((i + j));
			if (total == n)
			{
				if (i == j)
				{
					if (tag[i] == false)
					{
						total = 4;
						continue;
					}
					else
					tag[i] = false;//标记避免相同数字相加计算两遍
				}
				++ans;
			}
			total = 4;
		}
	cout << ans << endl;
	return 0;
}

分析思路:

1.手动分析,估测加数最多只会是三位数不会是四位数,确定下循环枚举的范围。

2.用一个10大小的数组存放不同数字会用掉的火柴棒,用下标调用,下标表示原来的数字值(如0下标对应6)

3.因为相同的加数只能算一次,所以用bool数组标记去重

4.最高位不能是0,因为两个加数和最后相加的答案都需要考虑这点,为了减少重复代码使用自定义函数add来添加一次尝试所用的总火柴棒数total。

5.学到memset函数填充内存的方法快速初始化数组。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

102101141高孙炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值