一道遊戲設計趣題

2021-08-15 11:44:07 字數 1487 閱讀 5376

前兩天好**乘坐飛機去外地開年會,估計公司怕他們坐飛機實在太無聊,給他們搞了幾道思考題。

在此我分享一下這道題目,以及答題思路。請先看題目內容。我直接上了,真的懶得打字呀~~~。

首先想到的是最直接的方法,找出各種分類,並累加各種分類模式的總數即可。

對於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 也...