問題:
有這樣一類問題,例如新生入學分班,現有100名新生,要分到4個班級裡, 要求每個班級的學生成績基本平均。假設新生的入學分數就是100,99,98,97,96,95,……3,2,1。分班結果如下:
0班 1班 2班 3班
100 99 98 97
93 94 95 96
92 91 90 89
85 86 87 88
這樣分班可以盡量使四個班級的成績平均。
也就是將新生按成績排序後蛇形排列到四個班級中,演算法如下:
private
string
getindex(
intnum,
intgroup)
//num 代表新生數量,group代表班級數量。
...steps =-
1;//修改前進方向為"<--"
if(index ==0
)//判斷是否到達班級佇列首部
steps =1
;//修改前進方向為"-->"
index
+=steps;
return
result;
} 呼叫該方法 getindex(100,4),即100個新生分到4個班級中,得到班級佇列如下
0123 3210 0123 3210 0123 3210 0123 3210 0123 ……
對應的學生隊列為:
100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,……
由兩個佇列就能得到分班結果
乙個求全排列的演算法
全排列是將一組數按一定順序進行排列,如果這組數有n個,那麼全排列數為n 個。現以為例說明如何編寫全排列的遞迴演算法。1 首先看最後兩個數 4,5。它們的全排列為4 5和5 4,即以4開頭的5的全排列和以5開頭的4的全排列。由於乙個數的全排列就是其本身,從而得到以上結果。2 再看後三個數3,4,5。它...
排列演算法彙總(下乙個排列,全排列,第K個排列)
一 下乙個排列 首先,stl提供了兩個用來計算排列組合關係的演算法,分別是next permutation和prev permutation。next permutation nums.begin nums.end 下乙個排列 prev permutation nums.begin nums.end...
C 演算法 下乙個排列 找規律
leetcode相關c 演算法解答 實現獲取下乙個排列的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。如果不存在下乙個更大的排列,則將數字重新排列成最小的排列 即公升序排列 必須原地修改,只允許使用額外常數空間。以下是一些例子,輸入位於左側列,其相應輸出位於右側列。1,2,3 1...