C/C++火柴棍等式

有n根(n<=24)火柴棍,你可以拼出多少个形如"A+B=C"的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示: 依次需要用到的火柴棍数目为6 2 5 5 4 5 6 3 7 6 。

如果是初学者可能会这么写。

复制代码
int main() {
	int a[10];
	int b, i, j, k;
	for (b = 0; b <= 9; b++) {
		cin >> a[b];
	}
	int n,n1;
	cin >> n;
	n1 = n - 4;
	for (i = 0; i <= 9; i++) {
		for (j = 0; j <= 9; j++) {
			for (k = 0; k <= 9; k++) {
				if ((i + j == k) && (a[i] + a[j] + a[k] == n1))
					cout << i << "+" << j << "=" << k<<endl;
			}
		}
	}

}

但聪明的小伙伴会发现问题了,我们漏掉了0+11=11、10+1=11这种两位数的火柴棍组合情况 。

正确做法如下:

复制代码
int fun(int num) {
	int sum = 0;
	int a[10] = { 6, 2, 5 ,5 ,4 ,5 ,6 ,3 ,7 ,6 };
	while (num/10 != 0)//说明是两位数
	{
		sum += a[num % 10];
		num /= 10;
	}
	sum += a[num];//一位数
	return sum;
}

int main() {
	int n;
	int count = 0;
	cin >> n;
	for (int i = 0; i <= 1111; i++) {
		for (int j = 0; j <= 1111; j++) {
			int k = i+j;
			if (fun(i) + fun(j) + fun(k) == n - 4) {
				cout << i << "+" << j << "=" << k << endl;
				count++;
			}
		}
	}
	cout << "总共" << count << "种";


	return 0;
}
相关推荐
老四啊laosi6 小时前
[C++进阶] 24. 哈希表封装unordered_map && unordered_set
c++·哈希表·封装·unordered_map·unordered_set
2301_764441336 小时前
LISA时空跃迁分析,地理时空分析
数据结构·python·算法
东北洗浴王子讲AI6 小时前
GPT-5.4辅助算法设计与优化:从理论到实践的系统方法
人工智能·gpt·算法·chatgpt
妙为7 小时前
银河麒麟V4下编译Qt5.12.12源码
c++·qt·国产化·osg3.6.5·osgearth3.2·银河麒麟v4
Billlly7 小时前
ABC 453 个人题解
算法·题解·atcoder
玉树临风ives7 小时前
atcoder ABC 452 题解
数据结构·算法
feifeigo1238 小时前
基于马尔可夫随机场模型的SAR图像变化检测源码实现
算法
weixin_446023568 小时前
C语言:面向过程、应用底层开发、跨平台的通用程序设计语言
c语言·跨平台·数据类型·底层开发·面向过程
fengfuyao9858 小时前
基于STM32的4轴步进电机加减速控制工程源码(梯形加减速算法)
网络·stm32·算法
无敌昊哥战神9 小时前
深入理解 C 语言:巧妙利用“0地址”手写 offsetof 宏与内存对齐机制
c语言·数据结构·算法