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

练习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 }

运行结果: