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;
}