Z字形考場編排演算法

2021-10-14 16:25:35 字數 1216 閱讀 8771

在大型考試中學生的座號一般按6*5 z字形編排。如下圖:

1       12      13      24      25

2       11      14      23      26

3       10      15      22      27

4       9       16      21      28

5       8       17      20      29

6       7       18      19      30

使用程式如何實現呢?

看似毫無頭緒,怎麼辦呢?先看看這樣的排列如何實現

1       7       13      19      25

2       8       14      20      26

3       9       15      21      27

4       10      16      22      28

5       11      17      23      29

6       12      18      24      30

這個很簡單,i為行,j為列,資料為 座號=i+j*6+1 (i,j從0起始)

對比兩個排列發現1、3、5列一樣,只是2、4列不一樣,那麼我們可以根據奇數列和歐數列分別進行計算

奇數列不變,座號=i+j*6+1 (i,j從0起始)

偶數列其值隨著行數增加而減小,座號=m=(j+1)*6-i-1

實現**如下:

for i in range(6):

for j in range(5):

if j%2==0:

m=j*6+i

else:

m=j*6-i+5

print(m+1,end="\t")

print("")

這裡把奇數列和偶數列分別做了處理,那麼能不能把兩個公式變成乙個呢?

m=j*6+((-1)**(j%2))*i+5*(j%2)      這樣就可以用乙個公式計算了。

**如下:

for i in range(6):

for j in range(5):

m=j*6+(-1**j)*i+5*(j%2)

print(m+1,end="\t")

print("")

經典Z字形編排問題的詳細解讀

正常8x8矩陣 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50...

陣列相關 4 4陣列轉置 z字形編排

4 4陣列轉置 includeusing namespace std int main int argc,char argv int i 0 int j 0 int tmp 0 for i 0 i 4 i j i 1 for i 0 i 4 i int i 0 int j 0 const int t...

演算法 Z字形變換

6.z 字形變換 將乙個給定字串根據給定的行數,以從上往下 從左到右進行 z 字形排列。比如輸入字串為 leetcodeishiring 行數為 3 時,排列如下 l c i r e t o e s i i g e d h n 之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如 lcire...