天天看點

解答微軟的一道邏輯推理題

以下是微軟有名的一道邏輯推理題,網上有不少人給出了答案,但是推理過程都有些問題,在這裡我給出我的推理過程:       教授選出兩個從2到9的數,把它們的和告訴學生甲,把它們的積告訴學生乙,讓他們輪流猜這兩個數

  甲說:“我猜不出”

  乙說:“我猜不出”

  甲說:“我猜到了”

  乙說:“我也猜到了”

  問這兩個數是多少

  [我的解答]    設甲聽到的和為M, 乙聽到的積為N,則:    M == A11 + B11 == A12 + B12 == …… == A1n + B1n( n >= 2)    N == A21 * B21 == A22 * B22 == …… == A2k * B2k (k >= 2)    且:      存在{i, j}滿足:    ( i)(A1i == A2j && B1i == B2j (j>=2 && j<=k))     ( ii) (A1i, B1i中至少有一個是合數 && 另一個數乘以前面那個合數的最小因子(>1)得到的積不超過9)  -> 否則乙不會說不知道(如果不同因數分解的個數為1,則乙知道答案;而為1的可能就是: 1)因數分解為兩個質數的組合; 2)因數分解為一個合數乘以另一個數,該數乘以前面那個合數的最小因子(>1)得到的積會超過9)   (iii)(對于任意的t, t<=n && t>= 2 && t!=i:A1t和B1t均為質數 || 一個為合數,而對于另一個數,如果乘以前面那個合數的最小因子(>1),會超過9)  ->  否則甲不會在乙說不知道的情況下又知道了(其實就是對上面一步的結論求逆命題)   (iiii) ( 對于任意的x, x<=k && x>=2 && x!=j: A2x, B2x中有一個數乘以另一個數的最小因子(>1)超過9 || A2x與B2x的和隻能轉化成一個合數與另一個數相加的形式,其中“另一個數”乘以這個合數的最小因子(>1)得到的積不超過9) -> 否則乙不會在甲說知道的情況下又知道了(這句話也是最難映射成數學表達的一句話:乙能在這一步得出答案,說明{A2j, B2j}(即{A1i, B1i})有{A2x, B2x}所沒有的特征。而到目前為止,我們所掌握的{A2j, B2j}的特征隻有: 1)A2j, B2j中至少有一個是合數 -> A2x, B2x均為質數(這不可能) 2)A2j, B2j中任何一個數乘以另一個數的最小因子(>1)不超過9 -> A2x, B2x中有一個數乘以另一個數的最小因子(>=1)超過9 3)A2j與B2j的和可以轉化成兩個質數相加的形式 或者 可以轉化成一個為合數與另一個數相加的形式:其中“另一個數”乘以這個合數的最小因子(>1)得到的積超過9 -> A2x與B2x的和隻能轉化成一個合數與另一個數相加的形式,其中“另一個數”乘以這個合數的最小因子(>1)得到的積不超過9      為了求出符合題意的A1i和B1i, 我們要使用逼近法來縮小範圍。      從甲的角度看:    2-9這8個數字中隻有4,6,8,9這4個合數,它們與2-9中的數相加,滿足條件( ii)的隻有和:{6, 7, 8, 9, 10, 11, 12}       再從乙的角度來考察,檢驗每個和:    如果M == 6: 此時{A1i, B1i}({A2j, B2j}) == {2, 4}({3, 3}不滿足條件( ii))。此時N = 2 * 4 = 8。但是8隻能分解成{2, 4}(注意取值隻能在2-9之間),這與k >= 2沖突。    如果M == 8: 存在{2, 6}, {4, 4},{3, 5},不滿足條件( iii)。       如果M == 9: 此時{A1i, B1i}({A2j, B2j}) == {3, 6}}({2, 7}不滿足條件( ii))。此時N = 3 * 6 = 18 = 2 * 9。2 + 9 = 11 = 4 + 7 = 3 + 8。 9的最小因子(>1)為3, 2 * 3 < 9 -> 不滿足條件( iiii)的第一個“或”部分;4的最小因子(>1)為2,7 * 2 > 9 -> 不滿足條件( iiii)的第二個“或”部分(與“隻能”沖突)。故:不滿足條件條件( iiii)。    如果M == 10: 存在{2, 8},{4, 6},{5, 5}不滿足條件( iii))。    如果M == 11: 存在{2, 9}, {3, 8}, {4, 7}, {5, 6},不滿足條件( iii))。    如果M == 12: 存在{3, 9}({6, 6}, {4, 8},{5, 7},不滿足條件( iii))。     最後得出:M隻能是7,對應的{A1i, B1i} == {3, 4}   [注] 這個推理可以改進的地方在于:“ 對于任意的x, x<=k && x>=2 && x!=j: A2x, B2x中有一個數乘以另一個數的最小因子(>1)超過9 || A2x與B2x的和隻能轉化成一個合數與另一個數相加的形式,其中“另一個數”乘以這個合數的最小因子(>1)得到的積不超過9”這句話的映射。應該有更好的同構的數學表達。

繼續閱讀