一個n行n列的螺旋矩陣可由如下方法生成:
從矩陣的左上角(第1行第1列)出發,初始時向右移動;如果前方是未曾經過的格子,則繼續前進,否則右轉;重複上述操作直至經過矩陣中所有格子。根據經過順序,在格子中依次填入1, 2, 3, ... , n,便構成了一個螺旋矩陣。
下圖是一個n = 4 時的螺旋矩陣。
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
現給出矩陣大小n以及i和j,請你求出該矩陣中第i行第j列的數是多少。
輸入共一行,包含三個整數 n,i,j,每兩個整數之間用一個空格隔開,分別表示矩陣大小、待求的數所在的行號和列號。
輸出共一行,包含一個整數,表示相應矩陣中第i行第j列的數
4 2 3
14
觀察一下規律,跟著數字增長的方向走,不難發現:
如果是第 1 行,那麼第 j 列的數字就是 j;
如果是第 n 列,那麼第 i 行的數字就是 n + i - 1;
後兩條規律有點難找,但是不要放棄,繼續觀察:
如果是第 n 行,那麼第 j 列的數字就是 3 × n − 2 − j + 1;
如果是第 1 列,那麼第 i 行的數字就是 4 × n − 4 − i + 2。
遞歸解法:把螺旋矩陣一層一層地剖開,看看目標位置在哪一層,然後加上這一層最左上角的數字(4 \times (n - 1)4×(n−1)),即為要求的數字。
ID | User | Problem | Subject | Hit | Post Date |
沒有發現任何「解題報告」 |