2017-06-08 76 views
-3

我有一個奇怪的情況,我試圖根據他們的位置對足球運動員進行排序。基於玩家位置排序數組

比方說,我有10名球員,我需要根據自己的立場對它們進行排序:

John | Position 1 
Bill | Position 1 
Gael | Position 2 
Phil | Position 2 
Joao | Position 2 
Cale | Position 3 
Bruu | Position 4 
Aron | Position 5 
Jimm | Position 5 
Carl | Position 5 

我需要嘗試將它們整理儘可能相等,在這種情況下:

1隊 - 約翰,蓋爾,卡爾,Jimm,卡爾

隊2 - 比爾,菲爾,若昂,Bruu,阿隆

我開始嘗試分割位置,然後在一個或另一個團隊對它們進行排序,BU它沒有像預期的那樣工作,因爲有時候我只有一個位置的球員,另一個位置只有3個球員。

+0

僅僅根據交替的列表中的奇數/偶數元素忽略位置而讓團隊難以接受? – user2464424

+1

我將這稱爲分組問題而不是排序問題,但我認爲這可能只是區域語義差異。另外,我不知道這個問題是否已經被很好地定義爲一個好的答案。如果您需要將球員分成球隊,完整球隊的標準是什麼,以及球隊平等程度如何? –

+0

您是試圖按位置排序,還是您正在嘗試構建儘可能在每個位置擁有相同數量球員的球隊? –

回答

0

如果你在每個位置沒有足夠的球員,似乎是唯一合理的方法就是按位置排序球員,然後通過列表,將下一名球員分配給下一個球隊。也就是說,給出一個列表和二隊,你會寫代碼,做這樣的:

John | Position 1 | Team 1 
Bill | Position 1 | Team 2 
Gael | Position 2 | Team 1 
Phil | Position 2 | Team 2 
Joao | Position 2 | Team 1 
Cale | Position 3 | Team 2 
Bruu | Position 4 | Team 1 
Aron | Position 5 | Team 2 
Jimm | Position 5 | Team 1 
Carl | Position 5 | Team 2 

的代碼非常簡單:

int numTeams = 2 
int team = 0 
for each player 
{ 
    Assign player to teams[team] 
    team = team + 1 
    if (team == numTeams) then 
    { 
     team = 0 
    } 
} 

如果你有其他的限制,像一個團隊非常有x位置y,那麼算法會有所改變以適應這些限制。但在提供建議之前,您必須先提供更多信息。

+0

理想情況下,我會有這個限制..但是即使我會說,理想情況下,我應該在每支球隊中擁有2個位置2的球員,但我沒有四個球員可用..我認爲這樣做..我不認爲這會很簡單..無論如何謝謝非常 – ledesma