程式應該很簡單

但我在 if 和 goto 猶豫很久

聽說 goto 會破壞程式結構,但加 if ( startx 的地方)感覺效率不彰......

 

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    int N;
    int arr[50][50];
    int dir;

    int upper, lower, right, left;
    int Sx, Sy;
    int cnt;

    while(cin >> N){

        cin >> dir;

        for(int i = 0; i<N; i++)
            for(int j = 0; j<N; j++)
                cin >> arr[i][j];

        Sx = Sy = N/2;
        upper = lower = left = right = N/2;

        cout << arr[Sx][Sy];
        cnt = 1;

        switch(dir){
            case 0:
                left--;
                goto start4;
                break;

            case 1:
                upper--;
                goto start1;
                break;

            case 2:
                right++;
                goto start2;
                break;

            case 3:
                lower++;
                goto start3;
                break;

            default:
                break;
        }

        while(cnt < N*N){

            start1:
            while(cnt < N*N && Sy > upper){
                cout << arr[--Sy][Sx];
                cnt++;
            }
            right++;

            start2:
            while(cnt < N*N && Sx < right){
                cout << arr[Sy][++Sx];
                cnt++;
            }
            lower++;

            start3:
            while(cnt < N*N &&Sy < lower){
                cout << arr[++Sy][Sx];
                cnt++;
                }
            left--;

            start4:
            while(cnt < N*N &&Sx > left){
                cout << arr[Sy][--Sx];
                cnt++;
            }
                upper--;
        }

        cout << endl;


    }
    return 0;
}
 

arrow
arrow
    全站熱搜

    大神(偽) 發表在 痞客邦 留言(1) 人氣()