#34741: C++詳解


11131039@stu.tshs.tp.edu.tw (二孝25林孟希)

學校 : 不指定學校
編號 : 201083
來源 : [125.228.248.38]
最後登入時間 :
2024-04-17 14:50:03
c292. APCS2017-0304-3數字龍捲風 -- 2017年3月APCS | From: [36.225.97.4] | 發表日期 : 2023-04-11 23:37

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,direction;
    cin>>n>>direction;
    int a[n][n];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cin>>a[i][j];
        }
    }
    int flagd=direction;//判斷方向變數(先設為初始方向)
    int flagl=0;//判斷長度是否變換
    int length=1;//行進長度
    int x=((n+1)/2)-1,y=((n+1)/2)-1;//紀錄座標
    cout<<a[x][y];//輸出中心點
    for(int i=0;i<n*n;i++)
    {
        //是否已經旋轉360度
        if(flagd>3)
        {
            flagd=0;
        }
        //同一個長度是否已經走兩次
        if(flagl>1)
        {
            flagl=0;
            length++;
        }
        //龍卷風中每一條直線
        for(int j=0;j<length;j++)
        {
            if(flagd==0)
            {
                x-=1;
            }
            else if(flagd==1)
            {
                y-=1;
            }
            else if(flagd==2)
            {
                x+=1;
            }
            else
            {
                y+=1;
            }
            cout<<a[y][x];
            //判斷終點是否到達
            if(direction==0)
            {
                if(y==n-1 && x==0)
                {
                    exit(0);
                }
            }
            else if(direction==1)
            {
                if(y==0 && x==0)
                {
                    exit(0);
                }
            }
            else if(direction==2)
            {
                if(y==0 && x==n-1)
                {
                    exit(0);
                }
            }
            else
            {
                if(y==n-1 && x==n-1)
                {
                    exit(0);
                }
            }
        }
        flagl++;//長度變換計次
        flagd++;//變換方向
    }
}
 
ZeroJudge Forum