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

目录

题目描述: 

输入输出示范:

​ 

源代码:

分析思路:


 

题目描述: 

 暴力枚举 洛谷1149 火柴棒等式_第1张图片

输入输出示范:

暴力枚举 洛谷1149 火柴棒等式_第2张图片 

源代码:

#include
#include
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函数填充内存的方法快速初始化数组。

 

 

 

 

你可能感兴趣的:(C++入门算法学习,#暴力枚举,算法,c++,c语言)