我試圖找到一種方式來以編程方式顯示n個藍色硬幣和m個紅色硬幣的所有安排。我知道答案是n + m C n,但我想讓計算機向我展示所有n + m C n的安排。只是爲了澄清,如果n和m都是2,計算機應該給出的輸出是:["bbrr", "brbr", "brrb", "rbbr", "rbrb", "rrbb"]
。另外,如果可能的話,代碼應該在Python中。如果你沒有Python,它會繼續工作,因爲我知道很多語言。我嘗試過使用itertools,但它不起作用,因爲每個紅色硬幣都算作不同。我已經嘗試了很多關於Python區分能力的研究,但沒有發現任何東西。幫助將不勝感激。組合:顯示所有安排
-4
A
回答
1
itertools
包中有你所要求的。但是,它會考慮相同的項目是獨立的實體,所以我們可以用set()
清理重複
from itertools import permutations
sorted(set(x for x in permutations('rrbb', 4)))
[('b', 'b', 'r', 'r'),
('b', 'r', 'b', 'r'),
('b', 'r', 'r', 'b'),
('r', 'b', 'b', 'r'),
('r', 'b', 'r', 'b'),
('r', 'r', 'b', 'b')]
-1
允許創建一個遞歸函數用於此目的,
F(0,0,currentStr)= currentStr
F(N,M,currentStr)= F(N-1,M,currentStr + 「b」)和f(n,m-1,currentStr +「r」)
+0
m和n變負,這永遠不會終止。您需要考慮兩個基本情況,分別是n = 0和m = 0。 –
1
下面是Haskell中一個基本的遞歸解決方案。
arrangements :: (Integral n, Integral m) => n -> m -> [String]
arrangements n 0 = [stimes n "b"]
arrangements 0 m = [stimes m "r"]
arrangements n m = (('b' :) <$> arrangements (n - 1) m)
<> (('r' :) <$> arrangements n (m - 1))
λ> arrangements 2 2
["bbrr","brbr","brrb","rbbr","rbrb","rrbb"]
λ> arrangements 2 3
["bbrrr","brbrr","brrbr","brrrb","rbbrr","rbrbr","rbrrb","rrbbr","rrbrb","rrrbb"]
相關問題
- 1. 如何顯示所有組合?
- 2. MySQL - 顯示所有排列?
- 3. 排序所有可能的組合
- 4. 排名所有可能GROUPBY組合
- 5. GroupBy所有可能的排列組合
- 6. 顯示所有分組結果和排序
- 7. 顯示集合中的所有變體
- 8. 顯示所有可移動設備的組合框
- 9. 顯示列表中所有數字組合的算法
- 10. 如何顯示4幅圖像的所有可能組合?
- 11. 如何顯示組的所有成員?
- 12. 並非所有顯示的組件
- 13. JPanel不顯示所有定製組件
- 14. 二維數組的所有可能的排列組合
- 15. 按SQL Server分組(顯示所選組中的所有元素)
- 16. PHP數組顯示不顯示所有列
- 17. Excel可以聚合/組合x個數據點並顯示平均值而不是顯示所有數據點?
- 18. 如何顯示Django中所有用戶的每日日程安排?
- 19. 組合框顯示部件
- 20. extjs組合顯示值
- 21. 顯示AudioCaptureDevices的組合框
- 22. 組合框SelectedItem顯示
- 23. 檢索MySQL數據在多個組合框排列顯示
- 24. 排序顯示的結果而不合並兩個數組
- 25. 測試所有組合(C++)
- 26. 獲取所有組合
- 27. 所有可能的組合
- 28. 生成所有組合
- 29. 所有組合 - LINQ查詢
- 30. 查找所有組合
我投票結束這個問題作爲題外話,因爲除了這個缺乏任何基礎研究或嘗試,這也是可以在Python標準庫中找到的東西,如果你試圖尋找它的一兩分鐘。 –
請發表您迄今爲止嘗試過的內容。 – James
這是一個合理的問題。標準庫選項* itertools.combinations *在這裏沒有幫助,因爲輸入具有重複值,並且庫函數採用不同的輸入。 –