下面的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
來源
2011-07-18 23:08:22
mjv
這聽起來很像功課給我。你有什麼嘗試?你卡在哪裏? – GWW
我在這裏看不到邏輯。如果我有5個單位,甚至無法理解我要如何分配。這不是一項家庭作業。 – user194076
考慮到我找不到「Serpentine算法」我也說它是作業。 –