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