上海交大OJ 從前有座山
阿新 • • 發佈:2018-11-29
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; }