面試題:在乙個黑暗的房間,有人塞給你一疊牌,有 n 張面朝上,其餘的面朝下。你看不見牌,怎樣才能把牌分成兩堆,讓每堆面朝上的牌數目相同呢?
求答案及詳細推理過程。
先數出 n 張牌,並將其翻轉,剩下的是另一堆。這兩堆牌中,面朝上的牌數目相同。
推理過程:
這道謎題流行於摩根大通。現在,你可以說拿出手機來照亮,顯然是合乎情理的。但事實上,這道謎題的出現時間早於手機,可以不用看牌就解決。或許可以從觀察以下這些專案入手:
● 任意把牌分成兩等份的做法行不通,除非你運氣超級好。所有面朝上的牌都可能分在同一堆裡。
● 問題中並未要求兩堆牌要相等,它只要求面朝上的牌數目相等。
● 你可以翻轉牌面。當然,你無法判斷所翻的牌是面朝上還是面朝下。
預期的答案是這樣:你從這疊牌的最上面數出 n 張牌,並將其翻轉。這就是一堆,桌上剩餘的牌是另一堆。
以下是它的運作原理。你數出的 n 張牌裡會有任意數目的牌面朝上,從 0 到 n 都有可能。假設翻轉之前有 f 張面朝上的牌,翻轉會使每一張面朝上的牌面朝下,而面朝下的牌變成面朝上。因此,翻轉之後,這堆牌裡有 n - f 張面朝上的牌。在桌上剩下的另一堆牌裡,也有( n - f )張面朝上的牌。因此,與你剛才翻轉的那堆牌裡面朝上的牌數目相等。
石子合併 任意兩堆合併
石子合併 一 描述 有n堆石子排成一排,每堆石子有一定的數量。現要將n堆石子並成為一堆。合併的過程中任意兩堆石子堆成一堆,每次合併花費的代價為這兩堆石子的和,經過n 1次合併後成為一堆。求出總的代價最小值。輸入 測試資料第一行有乙個整數n,表示有n堆石子。接下來的一行有n 0 n 200 個數,分別...
把n個物品分成m堆
1.把n個相同物品分成m個相同的堆,可空設為r n,m r n,m mk 1s n k 2.把n個相同物品分成m個相同的堆,不空設為s n,m s n,m s n 1,m 1 s n m m 3.把n個相同物品分成m個不同的堆,可空設為t n,m t n,m cm 1 n m 1 4.把n個相同物品...
程式設計之美1 13 NIM 3 兩堆石頭的遊戲
問題 假設有兩堆石頭,有兩個玩家會根據如下的規則輪流取石頭 每人每次可以從兩堆石頭中各取出數量相等的石頭,或者僅從一堆石頭中取出 任意數量的石頭 最後把剩下的石頭一次拿光的人獲勝。請問在哪些局面 依 據兩堆石頭中的石頭個數 下,先取石頭的玩家有必勝的策略。解法 類似構造質數的篩選方法,這裡我們利用找...