藍橋杯 轉方陣

2021-07-26 03:53:26 字數 1434 閱讀 8238

對乙個方陣轉置,就是把原來的行號變列號,原來的列號變行號

例如,如下的方陣:
1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

轉置後變為:
1 5 9 13

2 6 10 14

3 7 11 15

4 8 12 16

但,如果是對該方陣順時針旋轉(不是轉置),卻是如下結果:
13 9 5 1

14 10 6 2

15 11 7 3

16 12 8 4

下面的**實現的功能就是要把乙個方陣順時針旋轉。
void rotate(int* x, int rank)

for(i=0; ifree(y);

}int main(int argc, char* argv)

,,,};

int rank = 4;

rotate(&x[0][0], rank);

for(int i=0; ifor(int j=0; jprintf("%4d", x[i][j]);

}printf("\n");

}return

0;}

請分析**邏輯,並推測劃線處的**。

答案寫在 「解答.txt」 檔案中

注意:只寫劃線處應該填的內容,劃線前後的內容不要抄寫。

該題目考察了二維陣列的相關知識和矩陣的相關知識。

二維陣列的轉換公式為a[i][j] = a[i * rank + j];

觀察可得,順時針旋轉公式為i= j; j= rank - i - 1;

由i × rank + j = i_new**換後的i)

j = i_new % rank;

i = i_new / rank;

由此可得, i* rank + j= i_new / rank * rank + rank - i / rank - 1;

**如下

#include 

void rotate(int* x, int rank)

for(i=0; ifree(y);

}int main(int argc, char* argv)

,,,};

int rank = 4;

rotate(&x[0][0], rank);

for(int i=0; ifor(int j=0; jprintf("%4d", x[i][j]);

}printf("\n");

}return

0;}

藍橋杯 轉方陣

對乙個方陣轉置,就是把原來的行號變列號,原來的列號變行號 例如,如下的方陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 轉置後變為 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 但,如果是對該方陣順時針旋轉 不是轉置 卻是如下結果 1...

複習 藍橋杯 方陣轉置

對乙個方陣轉置,就是把原來的行號變列號,原來的列號變行號 例如,如下的方陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 轉置後變為 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 但,如果是對該方陣順時針旋轉 不是轉置 卻是如下結果 1...

2023年藍橋杯 初賽試題 轉方陣

問題描述 對乙個方陣轉置,就是把原來的行號變列號,原來的列號變行號 例如,如下的方陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 轉置後變為 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 但,如果是對該方陣順時針旋轉 不是轉置 卻是如...