乙個蛇形排列演算法(C )

2021-04-13 06:22:17 字數 977 閱讀 6658

問題:

有這樣一類問題,例如新生入學分班,現有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...