用1、2、3、4、5、6、7、8、9这9个数字,填入□ 中使等式□□×□□□ = □□□□ 成立,每个数字恰好只用一次。
以下是所有的7 个答案供参考:
12*483=5796 18*297=5346 27*198=5346 28*157=4396 39*186=7254 42*138=5796 48*159=7632
分析:
定义两位数为x,定义三位数为y,结果为z
z=x*y
分解x,y,z
x的个位:x%10 ,x的十位:x/10
y的个位:y%10 ,y的十位:y/10%10 ,y的百位:y/100
z的个位:z%10,z的十位:z/10%10 , z的百位:z/100%10, z的千位:z/1000
接下来解决如何保证这9个数字不重复?
使用数组a[10]记录每个数字使用的次数,初始时全为0,使用一次则加1.
代码实现:
#include<iostream> using namespace std; bool fun(int x, int y, int z) { int a[10] = { 0 }; int k = 0; a[x / 10] += 1; a[x % 10] += 1; a[y % 10] += 1; a[y / 10 % 10] += 1; a[y / 100] += 1; a[z % 10] += 1; a[z / 10 % 10] += 1; a[z / 100 % 10] += 1; a[z / 1000] += 1; if (a[0] == 0) {//必须要去除0 for (int i = 0; i < 10; i++) { if (a[i] == 1) { k++; } } if (k == 9) return true; } return false; } int main() { int x, y, z; for (x = 12; x < 99; x++) { for (y = 123; y < 987; y++) { z = x * y; if (z > 9999) break; if (fun(x,y,z)) { cout << x << "*" << y << "=" << z << endl; } } } return 0; }