有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;
}