PAT 1050 螺旋矩陣 25 分

2021-10-20 01:32:04 字數 1048 閱讀 1392

題目傳送門

<==戳這

如圖所示:

我們將填寫順序分解為一圈一圈(level)。

而每乙個level 又分為4個部分(根據n的不同,最後乙個level不一定有4個部分,但是不影響),分別對應於相同顏色的4個箭頭。

1.如何求level(圈數):

多畫幾個圖會發現,圈數和 「 短的 」 緊密相關,也就是和 lie 相關(不妨花點時間畫一畫),能夠得出規律:level = (int)( lie / 2 + 0.5),(即 lie / 2 的值向上取整)

2.如何求行(hang) 和 列(lie):

開始令lie=sqrt(n),因為lie <= hang,所以讓lie每次迴圈都減1,直到n % lie == 0時,有hang = n / lie。

理解基本原理之後,上**:

#include

#include

#include

#include

using

namespace std;

const

int maxn=

1e4+5;

int a[maxn]

[maxn]

;int f[maxn]

;bool

cmp(

int h,

int k)

intmain()

}int pos=0;

sort

(f+1

,f+1

+n,cmp);==

>排序

int level=

(lie/

2.0+

0.5)

;for

(int i=

1;i<=level;i++

)for

(int i=

1;i<=hang;i++

)putchar

('\n');

}}

PAT乙級1050 螺旋矩陣 25分

本題要求將給定的 n 個正整數按非遞增的順序,填入 螺旋矩陣 所謂 螺旋矩陣 是指從左上角第 1 個格仔開始,按順時針螺旋方向填充。要求矩陣的規模為 m 行 n 列,滿足條件 m n 等於 n m n 且 m n 取所有可能值中的最小值。輸入格式 輸入在第 1 行中給出乙個正整數 n,第 2 行給出...

PAT乙級 1050 螺旋矩陣 25分

本題要求將給定的 n 個正整數按非遞增的順序,填入 螺旋矩陣 所謂 螺旋矩陣 是指從左上角第 1 個格仔開始,按順時針螺旋方向填充。要求矩陣的規模為 m 行 n 列,滿足條件 m n 等於 n m n 且 m n 取所有可能值中的最小值。輸入在第 1 行中給出乙個正整數 n,第 2 行給出 n 個待...

1050 螺旋矩陣 25分

本題要求將給定的 n 個正整數按非遞增的順序,填入 螺旋矩陣 所謂 螺旋矩陣 是指從左上角第 1 個格仔開始,按順時針螺旋方向填充。要求矩陣的規模為 m 行 n 列,滿足條件 m n 等於 n m n 且 m n 取所有可能值中的最小值。輸入格式 輸入在第 1 行中給出乙個正整數 n,第 2 行給出...