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;
}
相关推荐
罗西的思考10 小时前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
CSharp精选营13 小时前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
美团技术团队14 小时前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
用户8055336980320 小时前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
To_OC1 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC1 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK1 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
金銀銅鐵2 天前
[Python] 模 n 乘法的逆元计算器
python·数学·游戏
卷无止境2 天前
Eigen 库如何借助 OpenMP 加速计算
c++·后端