2011-07-18 19 views
-3

你可以幫我分配算法嗎?蛇形算法

這是交易。我有筆數=(學生人數*每名學生的筆數) 所以,如果我有18名學生,每個學生有3筆,那麼我們共有54筆。 每支筆上都有一個訂單號碼:Pen1,Pen2,Pen3。我們必須均勻筆的數量由蜿蜒這樣分發到每一個學生:
人1:筆1
人2:筆
(假設18名學生)

如果每個用戶1筆2
人3:筆3
...
人18:筆18

2單位:

人1:筆1和筆36
人2:筆2和筆35
人3:筆3與筆34
...
人18:筆18和筆19
3個單位:

第一人:單元1,單元36,單元37
第二人:單元2,單元35,單元38
第三人:單元3,單元34,單元39
...
人18:單元18,unit19,每個學生unit54
4單位:

人1:單元1,單元36,單元37和單元72
人2:單元2 ,單元35,單元38和單元71
人3:單元3,單元34,單元39和單元70
...
人18:unit18,unit19,單元54,單元55

所以,輸入是每個學生的學生數+筆數。我需要輸出分佈(陣列)每名學生

+5

這聽起來很像功課給我。你有什麼嘗試?你卡在哪裏? – GWW

+0

我在這裏看不到邏輯。如果我有5個單位,甚至無法理解我要如何分配。這不是一項家庭作業。 – user194076

+0

考慮到我找不到「Serpentine算法」我也說它是作業。 –

回答

1

這是Serpentine System

下表會告訴你哪個筆給每個人:

person  Pen 1   Pen 2    Pen 3   Pen 4 
    1  PERSONS*0+1 PERSONS*2-0  PERSONS*2+1 PERSONS*4-0 
    2  PERSONS*0+2 PERSONS*2-1  PERSONS*2+2 PERSONS*4-1 
    3  PERSONS*0+3 PERSONS*2-2  PERSONS*2+3 PERSONS*4-2 
    4  PERSONS*0+4 PERSONS*2-3  PERSONS*2+4 PERSONS*4-3 
    : 
    : 
    N  PERSONS*0+N PERSONS*2-(N-1) PERSONS*2+N PERSONS*4-(N-1) 
       ^   ^    ^   ^
        |    |     |    | 
        +--- start at 0 and increase 2 every 2 pens ---+---> 4, 6, 6, 8 

等都在兩個方向。

0

有一個模式...

5單位:

 
person 1: unit 1, unit 36, unit 37, unit 72, unit 73 
person 2: unit 2, unit 35, unit 38, unit 71, unit 74 
person 3: unit 3, unit 34, unit 39, unit 70, unit 75 
... 
person 18: unit18, unit 19, unit 54, unit 55, unit 90 

等。

這是一樣的4單位每人增加一列,每列增加和減少之間交替。

2

下面的Python代碼片段應該能夠解決nbPersons和nbItems的所有正值(例如,分配7個項目到23個人等等)。

簡而言之想法是通過行填充表,產生在每個小區給定爲行號和列號
在所述摘錄的函數的項數,person變量是[從1開始]的行號和item變量是[再次基於1]的列號。
主要技巧是將itemNo分配爲總和:前面完成列(下面的(item - 1) * nbPersons)中的項目數量加上當前列中項目no的值。當前列的值取決於列是偶數還是奇數,因爲我們必須「倒數」偶數列。
在代碼中,論壇是故意「拼寫出」的可讀性;他們可以被分解。

nbPersons = 18 // change these, or turn them into 
    nbItemsPP = 5 // a function's arguments 
    for person in range(1, nbPersons + 1): 
    print "Person ", person 
    for item in range (1, nbItemsPP + 1): 
      if item % 2 == 1: // odd column ? 
       unitNo = (item - 1) * nbPersons + person 
      else:    // even column ? 
       unitNo = (item - 1) * nbPersons + nbPersons - person + 1 
      print " U# ", unitNo, 
    print 

結果:

Person 1 U# 1 U# 36 U# 37 U# 72 U# 73 
Person 2 U# 2 U# 35 U# 38 U# 71 U# 74 
Person 3 U# 3 U# 34 U# 39 U# 70 U# 75 
Person 4 U# 4 U# 33 U# 40 U# 69 U# 76 
Person 5 U# 5 U# 32 U# 41 U# 68 U# 77 
Person 6 U# 6 U# 31 U# 42 U# 67 U# 78 
Person 7 U# 7 U# 30 U# 43 U# 66 U# 79 
Person 8 U# 8 U# 29 U# 44 U# 65 U# 80 
Person 9 U# 9 U# 28 U# 45 U# 64 U# 81 
Person 10 U# 10 U# 27 U# 46 U# 63 U# 82 
Person 11 U# 11 U# 26 U# 47 U# 62 U# 83 
Person 12 U# 12 U# 25 U# 48 U# 61 U# 84 
Person 13 U# 13 U# 24 U# 49 U# 60 U# 85 
Person 14 U# 14 U# 23 U# 50 U# 59 U# 86 
Person 15 U# 15 U# 22 U# 51 U# 58 U# 87 
Person 16 U# 16 U# 21 U# 52 U# 57 U# 88 
Person 17 U# 17 U# 20 U# 53 U# 56 U# 89 
Person 18 U# 18 U# 19 U# 54 U# 55 U# 90 
+0

你的代碼幫了很大忙,但我只能接受一個答案。謝謝! – user194076