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;
}
相关推荐
小白菜又菜13 小时前
Leetcode 944. Delete Columns to Make Sorted
算法·leetcode
Alex Cafu13 小时前
Linux网络编程1(OSI模型与TCP/IP协议栈)
linux·c语言·网络·tcp/ip
博语小屋13 小时前
转义字符.
c语言·c++
Lhan.zzZ13 小时前
Qt跨线程网络通信:QSocketNotifier警告及解决
开发语言·c++·qt
Aevget13 小时前
QtitanDocking 如何重塑制造业桌面应用?多视图协同与专业界面布局实践
c++·qt·界面控件·ui开发·qtitandocking
我找到地球的支点啦13 小时前
Matlab系列(006) 一利用matlab保存txt文件和读取txt文件
开发语言·算法·matlab
-森屿安年-13 小时前
STL中 Map 和 Set 的模拟实现
开发语言·c++
历程里程碑14 小时前
双指针巧解LeetCode接雨水难题
java·开发语言·数据结构·c++·python·flask·排序算法
Dev7z14 小时前
基于Matlab实现GRACE卫星重力数据的全球水储量变化估算与分析
人工智能·算法·matlab
ALex_zry14 小时前
C++ 中多继承与虚函数表的内存布局解析
java·开发语言·c++