題目傳送門
<==戳這
如圖所示:
我們將填寫順序分解為一圈一圈(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 行給出...