用1、2、3、4、5、6、7、8、9这9个数字,填入□ 中使等式□□×□□□ = □□□□ 成立,每个数字恰好只用一次。

mac2024-05-16  33

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

最新回复(0)