前兩天好**乘坐飛機去外地開年會,估計公司怕他們坐飛機實在太無聊,給他們搞了幾道思考題。
在此我分享一下這道題目,以及答題思路。請先看題目內容。我直接上了,真的懶得打字呀~~~。
首先想到的是最直接的方法,找出各種分類,並累加各種分類模式的總數即可。
對於5種兵種,其形式可分為:
1 1 1 1 1 (陣容為一樣乙個) 對此形式總數為 1 ,從5個兵種中取出5個兵種, 組合數為c55.
5 (陣容為同一兵種) 對此形式總數為5 ,從5個兵種中取出1個兵種,組合數為c51.
2 2 1 (2個某兵種,2個某其他兵種,1個某其他兵種) 對此形式總數為 30,組合數為c51 * c41 * c31 / 2. (這裡需要除以2 ,要去除221中22引起的重複)
2 3 (請腦補)對此形式總數為20,組合數為c51 * c41.
1 4 (請腦補) 對此形式總數為20,組合數為c51 * c41.
1 1 1 2 (請腦補)對此形式總數為20,組合數為c51 * c41 * c31 * c21 / 6.(這裡需要除以6 ,要去除1112中111引起的重複)
1 3 1 (請腦補)對此形式總數為30,組合數為c51 * c41 * c31 /2. (這裡需要除以2 ,要去除131中1 1引起的重複)
一共為 1 + 5 + 30 + 30 + 20 + 20 + 20 = 126.
理論上此題目已經解決,但是還沒有抽取出可以擴充套件的規律。也就是說還有找到解決問題的通式。進一步思考,想到了高中時學習的插空法。嗯,可用此法優化解題思路。
5個兵種槽位之間有4個空,插空即使將槽位進行分類。分類方式為插零個空c40(不分),插乙個空c41(分成兩部分),兩個空c42(分成三部分),三個空c43(分成四部分),四個空c44(分成五部分)。
以分成兩部分為例:
c41 * c52 :c52的意思為從5個兵種中任取2個兵種。將兩個兵種分配到c41個槽模式下,總數為40.
最終總數為:
c40*c51 + c41*c52 + c42*c53 + c43*c54 + c44*c55 = 5 + 40 + 60 + 20 + 1 = 126
將組合式(1)進行如下變換得到組合式(2)
c44*c51 + c43*c52 + c42*c53 + c41*c54 + c40*c55 (2)
組合式(2)可以 => c95
9 為(5 - 1) + 5 也就是槽數 -1 + 兵種數
5 為 兵種數
所以類似問題均可用乙個組合數來表示。妙哉!~
最後,我**告訴我其實我推出了乙個 公式。。。。
允許重複組合
還有乙個巧妙的思路,可以直接得出c94的答案,在這裡我就不介紹了,方法總比問題多,僅在這裡拋磚引玉,如果錯誤請大家批評指正。謝謝。
一道智力遊戲趣味程式設計題
題目如下 一副撲克有52張牌,打橋牌時應該把牌分配給四個人,請先設計程式模擬發牌的過程。要求 黑桃用s spaces 表示 紅桃用h heart 表示 方塊用d diamond 表示 梅花用c clubs 表示 問題分析 按照打橋牌的規則,每人應該發到13張牌,在人工發牌時,應該先進行 洗牌 再把牌...
一道和位與操作 相關的趣題
在 google 的toplanguage 論壇中看到一道題目,和位與操作 相關。先簡單回顧一下什麼叫做位與操作符 位與操作 需要兩個整型運算元,在每個位的位置,如果兩個運算元對應的位都為 1,則操作結果中該位為 1,否則為0。unsigned char b1 0145 表達為二進位制,結果如下 0...
一道演算法題
兩個燒杯,乙個放糖乙個放鹽,用勺子舀一勺糖到鹽,攪拌均勻,然後舀一勺混合 物會放糖的燒杯,問你兩個燒杯哪個雜質多?一樣多吧 對的 為啥?是不是因為 糖和鹽本來就是均勻的 因為,就算不攪拌均,你放一勺過去,那邊放一勺不含雜質的過來,那麼都是一勺雜之 如果攪拌均勻的話也是一樣 小依 21 45 32 也...