2~100之間的兩個數,把和告訴a,把積告訴b。問a知不知道這兩個數是哪兩個,a說:「雖然我不知道,但是我肯定b也不知道」。再問b,b說:「本來我不知道,但是聽到a這麼說,現在我知道了」。a聽到b說他知道了,然後就說:「現在我也知道了」。那麼你知道這兩個數都是什麼嗎?
分析:(1)a先說:」雖然我不知道,但是我肯定b也不知道。「從這句話我們得到的資訊是,b知道的數肯定不是兩個素數相乘的結果。
因此a知道的數就不可能是兩個素數的和,可以排除在2~100之間兩個加數同時是素數的和。像2=1+1,5=2+3,10=5+5……
餘下的數字是:11,17,23,27,29,35,37,41,47,51,53,57,59……
有上面的和推出積的可能性:
11 -》 18,24,28,30
17 -》 30,42,52,60,66,70,72
23 -》 42,60,76,90,102,112,120
27 -》 50,72,92,110,126,140,152……
29 -》 54,78,100,120,115,138,154……
35 -》 66,96,124,150,174,196……
(2)b說:「本來我不知道,但是聽到a這麼說,現在我知道了」。此句話證明了乙個積不可能對應不同的和。
刪除上式中重複的元素,像30,42,72……
得到:11 -》 18,24,28
17 -》 52
23 -》 42,76
27 -》 50,92……
29 -》 54,78……
35 -》 96,124……
(3)a聽到b知道了,也說」自己知道了「。可見積是唯一的。
由於上面列出的式子中只有一行是唯一的,因此也就知道了結果。
結果是:a知道的和是17,b知道的積是52,兩個數是4和13.
輸入任意兩個數,找到兩個數之間的回文數
如題,編寫乙個這樣的程式實現找出兩個數之間的回文數,先介紹下什麼是回文數,回文數就是這個數正過來寫和反過來寫的數值是相等的,如12321,反過來寫還是12321.先上 include include include using namespace std bool fun int void main...
把兩個陣列合併
將兩個整型公升序資料集合a和b合併成乙個公升序資料集合 例a b 結果 c include define m 7 define n 5 主函式 int main void int b n int c m n merge a,b,c for int i 0 i m n i return 0 方法一 v...
求兩個數和
題目描述 寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。思路 位運算 兩個數異或 相當於每一位相加,而不考慮進製 兩個數相與,並左移一位 相當於求得進製 將上述兩步的結果相加 具體步驟 首先看十進位制是如何做的 5 7 12,三步走 第一步 相加各位的值,不算進製,得到2。第二步...