上海交大OJ 从前有座山

1021. 从前有座山

Description

从前有座山,山的俯视图是一个n×n n×n 的矩形,(1,1) (1,1) 位置海拔最低为1 1 ,然后海拔沿环形依次升高。

给定n的值,输出这座山的海拔高度图。

Input Format

输入仅有一行,为一个正整数n n 。

Output Format

输出为这座山的海拔高度图。

Sample Input

4

Sample Output

     1     2     3     4
    12    13    14     5
    11    16    15     6
    10     9     8     7
#include <iostream>
#include <cstdio>

using namespace std;

int main(int argc, char const *argv[]) {
    //N X N
    int N;
    scanf("%d",&N);

    int p[N][N] = {0};

    //第一个位置已经置1 所以从2开始
    int k = 2;

    for(int i = 0;i < N;i++)
        for(int j = 0;j < N;j++){
            p[i][j] = -1;
        }

    int a = 0,b = 0;

    // 第一个位置为1
    p[0][0] = 1;

    while (k <= N * N) {
        //从左向右走
        while(k <= N * N){
            b++;
            p[a][b] = k++;
            if(b + 1 == N || p[a][b + 1] != -1)break;
        }
        // 从上往下走
        while(k <= N * N){
            a++;
            p[a][b] = k++;
            if( a + 1 == N || p[a + 1][b] != -1)break;
        }
        //从右往左走
        while(k <= N * N){
            b--;
            p[a][b] = k++;
            if(b == 0 || p[a][b - 1] != -1)break;
        }
        //从下往上走
        while(k <= N * N){
            a--;
            p[a][b] = k++;
            if(a == 0 || p[a - 1][b] != -1)break;
        }
    }

    for(int i = 0;i < N;i++){
        for(int j = 0;j < N;j++){
            printf("%-6d",p[i][j]);
        }
        printf("\n");
    }
    return 0;
}

 

猜你喜欢

转载自blog.csdn.net/WX_1218639030/article/details/84137334
今日推荐