題目連結: https://zerojudge.tw/ShowProblem?problemid=a417
# 解題思路
一開始就用 - 1 當作邊界圍住矩陣
當矩陣的值沒有碰到數字就輸出,碰到就轉變方向,直到輸出完為止
(順帶一提,setw () 的函式可以控制空格數量喔~)
# 程式碼
#include<iostream> | |
#include<cstring> | |
#include<iomanip> | |
using namespace std; | |
int main(){ | |
int T ,N ,type,M[110][110] ; | |
cin>>T; | |
while (T-- ){ | |
cin>>N>>type; | |
memset(M,0,sizeof(M)) ; | |
for (int i=0 ;i<=N+1 ;i++ ){ | |
M[0][i]=M[N+1][i]=M[i][0]=M[i][N+1]=-1 ; | |
} | |
int c=1 ,i=1 ,j=0 ; | |
while (c<=N*N){ | |
while (!M[i][j+1]) | |
M[i][++j]=c ,c++ ; | |
while (!M[i+1][j]) | |
M[++i][j]=c ,c++ ; | |
while (!M[i][j-1]) | |
M[i][--j]=c ,c++ ; | |
while (!M[i-1][j]) | |
M[--i][j]=c ,c++ ; | |
} | |
if(type==1){ | |
for(int i=1;i<=N;i++){ | |
for(int j=1;j<=N;j++) | |
cout<<setw(5)<<M[i][j]; | |
cout<<endl; | |
} | |
} | |
else | |
for(int i=1;i<=N;i++){ | |
for(int j=1;j<=N;j++) | |
cout<<setw(5)<<M[j][i]; | |
cout<<endl; | |
} | |
} | |
} |