1樓:3rr0r
下面是答案
其實就是個單迴圈賽的問題,N支球隊在N-1天比賽完畢,不重複比賽,這個相關的演算法已經研究的挺透徹了,有傳統的固定輪轉編排法,但是對於奇數個隊伍數,第二輪輪空的隊伍從第四輪起,每一場都會與上一輪落空的隊伍比賽,這樣不公平,所以有了貝格爾編排法,有興趣可以去看看。還有針對2^n支隊伍的分治法,比較簡單,但是適用範圍有限。
這裡介紹一下最簡單粗暴的固定輪轉編排法以123456為例,每一輪以中間為軸進行匹配,完成後將最後一支隊伍插入第二隻隊伍處(也就是後5支隊伍編號向右迴圈移位),過程如下:
第一輪(123456):
16 25 34
第二輪(162345):
15 64 23
第三輪(156234):
14 53 62
第四輪(145623):
13 42 56
第五輪(134562):
12 36 45
這就得到對於6支隊伍5輪比賽的匹配結果了。
對於奇數支隊伍也是一樣,但是每輪中間的隊伍都會輪空,n支隊伍要完成n輪比賽,每支隊伍落空一次。完。
2樓:黃亮anthony
似乎有簡單解,因為可能的解不會超過n-1組。
每次取最小的元素和餘下的n-1個成為一對,就可以生成所有對。
0 1 2 3 4 5
0 2 1 4 3 5
0 3 1 5 2 4
0 4 1 3 2 5
0 5 1 2 3 4
似乎答案還不唯一,第二組開始
0 2 1 5 3 4
0 3 1 4 2 5
0 4 1 2 3 5
0 5 1 3 2 4
3樓:stay
我這個人比較蠢,只會調包
constexpr
size_tP(
size_tn,
size_tm);
template
size_t N>void print (const array );template N>constexpr bool judge (size_ti) }int main(); size_ti= 0;do++i; }while (next_permutation (begin (arr ),end (arr ))); }我比較蠢,只會用next_permutation遍歷每個排列,用i表示序號,通過觀察N=2、4、6的序號結果 當N=2時,取1個,分別是0 當N=4時,每隔2個取3個,分別是0、2、4當N=6時,每隔24個每隔2個取3個取5個,分別是(0, 2, 4)、(24, 26, 28)、(48, 50, 52)、(72, 74, 76)、(96, 98, 100) 可得當N=2時,依題意序號為0的為唯一解,當N>2時,每隔P(N - 2, N - 2)取(N - 1)個,遞迴微分到N=2 4樓: 大致就是比如 [1,2,3,4,5,6,7,8] 就兩兩分成 [1,2],[3,4],[5,6],[7,8] 然後依次交換相鄰兩個組中的乙個元素,必然會生成所有符合要求的組合。通過一些技巧可以避免重複的結果出現,細節在 The Art of Computer Programming: Fascicle 2 裡有。 我的想法是 1,建立乙個字典 記錄其中兩兩陣列相同元素個數,假設 從1 1到1 2000萬,2 1到2000萬,最後19999999 2000萬。2,依次判斷兩兩陣列相同元素的個數 倆個陣列對應下標的元素 然後記錄在字典中 判斷相同 value增1 3,字典中值大於80 值 陣列長度的比值 的兩陣列... 參考python cookbook 4.9章 排列組合的迭代 from itertools import combinationsa 1,2,3,4 result list for c in combinations a,2 也許 a 1,2,3,4 result foriina forjin a ... 美麗的日子 建議再觀察觀察,你做些改變試試,找找自身的原因,如果不是啥原則性問題就再觀察下,我跟老公結婚三年時也有感情特別不好的時候,那會兒真想離了算了,但熬過了那一年,互相成熟了,發現了彼此的好,慢慢的感情又好了起來,現在結婚9年了,感情依然很好。找他談談再努力一下試試,別留遺憾,相愛不易 小芝麻...面試題 怎樣快速找出兩兩相似的陣列?
Python如何使乙個列表裡的元素兩兩相加,例如a 1,2,3,4 ,使裡面數字兩兩相加?
婚姻到了兩兩相看兩兩相厭的地步。毫無幸福可言怎麼辦?