這道好玩的數學題該如何解答?
可以使用各種方法來證明,或高深的方法,或簡單的方法,如果無解,請證偽
謝邀。這道題是錯的。
把四個式子加起來,左邊相當於1-8中的六個數加起來減去其中的兩個數,右邊等於19.給等式兩邊加上減去的那兩個數和的2倍,則左邊相當於1-8加起來,為36,;而右邊等於19加上兩個數和的2倍。奇偶性矛盾。引用樓上的做法,
左邊加起來為19時,得36-19=17為兩數和,又最大和為8+7=15,故矛盾
此題無解
試遍所有情況,發現沒有一個解。
#include &
#include &
//input:1,2,3,4,5,6,7,8
//equations:
//? + ? = 7 , 3 choices : 1 2 3
//? + ? = 9 , 4 choices : 1 2 3 4
//? - ? = 2 , 6 choices : 3 4 5 6 7 8
//? - ? = 1 , 7 choices : 2 3 4 5 6 7 8
class Solution
{
public:
void Solve();
void OnSolve( int i, int j, int k, int m );
private:
std::set&
};
int main()
{
Solution s;
s.Solve();
return 0;
}
void Solution::OnSolve( int i, int j, int k, int m )
{
m_Solution.insert( { i,7 - i,j,9 - j,k,k - 2,m,m - 1 } );
if ( 8 == m_Solution.size() )//if duplicates exist,inevitably size!=8
{
std::cout &<&< "Bingo.." &<&< std::endl;
}
else
{
m_Solution.clear();
}
}
void Solution::Solve()
{
for ( int i = 1; i &<= 3; ++i )
for ( int j = 1; j &<= 4; ++j )
for ( int k = 3; k &<= 8; ++k )
for ( int m = 2; m &<= 8; ++m )
OnSolve( i, j, k, m );
}
推薦閱讀: