題目連結: 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;
            }
    }
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay