练习2:雨淋湿了一道题,9个数字只能看清楚4个,第一个肯定不是1 [X * (Y3 + Z)]^2 = 8MN9,求出各个数字

题目上的X代表的未知数,不一定是同一个数字。

其实这道题,直接一推敲答案就出来了,首先,积德尾数是9,说明 X*(Y3 + Z)的值尾数是3,3的因子只有1和3,所以X只有1和3候选,但是题目说第一个肯定不是1,那就是3了。

那么括号里面Y3+Z的值就必然尾数是1,而能和3相加尾数是1的只有8,所以Z就是8了。这样就还剩下Y的值了,平方等于8000+的数字,一想大概是在90左右,

这样子,括号里面(Y3+Z)的值大概就框定在30左右,肯定比30大,但绝对不超过35,由于之前已经判断出Z是8,所以Y自然就是2了,所以得到的等式左边就是3*(23+8)即93的平方等于

8649,这样子,等式右边的值也出来了,得到:X = 3,Y = 2, Z = 8, M = 6, N = 4。

关于代码的问题,我还没想带效率足够高的算法,留着以后看看,优化优化:

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     for (int  i = 2; i < 10; i++)
 6     {
 7         for (int j = 0; j < 10; j++)
 8         {
 9             for (int k = 0; k < 10; k++)
10             {
11                 for (int m = 0; m < 10; m++)
12                 {
13                     for (int n = 0; n < 10; n++)
14                     {
15                         if ((i * (j * 10 + 3 + k))*(i * (j * 10 + 3 + k)) == (8009 + m * 100 + n * 10))
16                         {
17                             cout<<"i = "<<i<<endl;
18                             cout<<"j = "<<j<<endl;
19                             cout<<"k = "<<k<<endl;
20                             cout<<"m = "<<m<<endl;
21                             cout<<"n = "<<n<<endl;
22                         }
23                     }
24                 }
25             }
26         }
27     }
28     return 0;
29 }

运行结果:

原文地址:https://www.cnblogs.com/leisc/p/3840569.html