在大型考試中學生的座號一般按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...