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

用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/10

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章