生成陣列元素兩兩配對的結果,每輪配對不能有與之前的配對有相同的嗎

時間 2021-06-09 07:13:22

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

&arr

);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如何使乙個列表裡的元素兩兩相加,例如a 1,2,3,4 ,使裡面數字兩兩相加?

參考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年了,感情依然很好。找他談談再努力一下試試,別留遺憾,相愛不易 小芝麻...