常見的邏輯思考題

2022-03-06 16:04:02 字數 1429 閱讀 6854

對於乙個優秀的程式設計師來說,學習理解一些邏輯思考題有助於開闊自己的思維,在編碼過程中邏輯更加的嚴密完整。同時,還能增添日常枯燥生活的趣味,通過解答一道複雜的邏輯思考題,會獲得慢慢的成就感,那我們還有什麼理由不去學習和理解呢?

有100個囚犯,將他們站成一排依次報數,報到奇數的那個人被槍斃,接著開始下一輪報數,報到奇數的被槍斃,依次類推,到最後只剩乙個人時無罪釋放,假如你現在是一名囚犯,要站在第幾個位置才能活到最後?

問題是知道了槍斃次數,該如何知道最後那個幸運兒是在那個位置呢? 於是我想把問題簡單化一些,換成10個囚犯,這下就簡單多了,通過推演,最後的幸運兒就是第八位的那位囚犯。但我們進行了幾輪槍斃呢?依照上圖演算法得出是3輪,3和8有什麼關係呢?這時我不由想到剛學的二進位制,2的3次方比就是8嗎?難道?是這個規律?我趕緊將囚犯增加到20位,然後依照上圖推算得出需要槍斃4輪,最後的幸運兒是16號,2的4次方剛好是16,所以該題的解決方法就是通過除2的方法算出需要多少輪,最終的幸運位置就是2的n次冪。

儘管得到了解決方法但我依然覺得我對這個方法的原理還是不夠理解,不明白其中的原理究竟是為什麼?通過在網上尋找答案,我終於找到了還算合理的解釋,如下:

若將編號換成2進製,偶數是指尾數為0,奇數則為尾數為1。第一輪將奇數全數槍斃後,剩下人再下一輪的編號即為目前編號除以2(例:2號變1號、4號變2號),而在2進製除以2的意義即為去掉尾數的0。故能夠存活的人在2進製的編號為1000000,即為第64個人

正解:首先我們將囚犯總數換算成二進位制來進行理解,奇數字槍斃即二進位制最低位為1的數被槍斃,比如(二進位制101,二進位制111...),而那些沒有被槍斃的犯人,由於經過上一輪的槍斃,他們的位置發生了改變,原本在2位置的範圍變成了1位置,4位置的犯人變成了2位置,他們的位置都在原先的位置上除了2,在二進位制中對偶數除2就是去0(去除最右邊的0),所以要想要活得久,就必須這個數的1位置離右邊越遠越好,比如1000000,所以在100個人中,換算為二進位制即為1100100人中,1位置最遠離右邊的乙個數就是1000000這個數,換算為10進製就是64。

思考:如果是乙隻老鼠喝一瓶那就需要100只才能試出來了,顯然這不是最優解。因為老鼠吃了毒藥只有死和活兩種可能,所以我們可以考慮用二進位制來解決,用二進位制來表示這100瓶液體一共需要7位數,所以答案就在其中了

正解:100瓶液體用二進位制編號共需要7位,100的二進位制是1100100,我們只需要7只老鼠,從左到右排序,碰到液體編號的二進位制位是1就喝,是0就不喝,然後看哪些老鼠死了,然後在看他們共同喝了哪一瓶液體,並且那瓶液體沒被其他老鼠喝,那瓶液體就是毒藥,可能文字表示不是很形象,直接上圖

討論 思考題

1 功能 編寫函式 float fun 利用以簡單迭代方法 xn 1 cos xn 求方程 cos x x 0 的乙個實根。迭代步驟如下 1 取x1 初值為0.0 2 x0 x1 把x1 的值賦給x0 3 x1 cos x0 求出乙個新的x1 4 若x0 x1 的絕對值小於 0.000001 執行步...

討論 思考題

1 功能 請編寫函式 void fun char s n char b 將 m行n列的二維陣列中的字元資料按列的順序依次放到乙個字串中。例如 二維陣列中的資料為 w w w w s s s s h h h h 則字串中的內容應是 wshwshwshwsh 2 功能 編寫函式 void fun cha...

趣味思考題

1.一間囚房裡關押著兩個犯人。每天監獄都會為這間囚房提供一罐湯,讓這兩個犯人自己來分。起初,這兩個人經常會發生爭執,因為他們總是有人認為對方的湯比自己的多。後來他們找到了乙個兩全其美的辦法 乙個人分湯,讓另乙個人先選。於是爭端就這麼解決了。可是,現在這間囚房裡又加進來乙個新犯人,現在是三個人來分湯。...