总时间限制:
1000ms
内存限制:
65536kB
-
描述
-
用数字1,2,3,4,...,n*n这n2个数蛇形填充规模为n*n的方阵。
蛇形填充方法为:
对于每一条左下-右上的斜线,从左上到右下依次编号1,2,...,2n-1;按编号从小到大的顺序,将数字从小到大填入各条斜线,其中编号为奇数的从左下向右上填写,编号为偶数的从右上到左下填写。
比如n=4时,方阵填充为如下形式:
1 2 6 7 3 5 8 13 4 9 12 14 10 11 15 16
输入
- 输入一个不大于10的正整数n,表示方阵的行数。 输出
- 输出该方阵,相邻两个元素之间用单个空格间隔。 样例输入
-
4
样例输出
-
1 2 6 7 3 5 8 13 4 9 12 14 10 11 15 16
-
#include<stdlib.h> #include<stdio.h> int A[100][100]; int row = 0, cro = 0;//当前位置 int mark = 1;//偶数向上,奇数向下 void que(int n) { int j = n*n; for (int i = 1; i <=j; i++) { if (mark % 2 == 1)//奇数向上 { if (row < 0 && cro>0 && cro < n)//上边出界 { row = 0; A[row][cro] = i; mark++; row += 1; cro -= 1; } else if (row < 0 && cro >= n)//右上顶点出界 { row = 1; cro = n - 1; A[row][cro] = i; mark++; row += 1; cro -= 1; } else if(row >= 0 && row < n-1&&cro >= n)//右边出界 { row += 2; cro = n - 1; A[row][cro] = i; mark++; row += 1; cro -= 1; } else //无出界 { A[row][cro] = i; row -= 1; cro += 1; } } else //偶数向下 { if (row > 0 && row < n&&cro < 0)//左边出界 { cro = 0; A[row][cro] = i; mark++; row -= 1; cro += 1; } else if (row >= n&&cro < 0)//左下顶点出界 { row = n - 1; cro = 1; A[row][cro] = i; mark++; row -= 1; cro += 1; } else if (row >= n&&cro >= 0 && cro < n - 1)//下边出界 { row = n - 1; cro += 2; A[row][cro] = i; mark++; row -= 1; cro += 1; } else //无出界 { A[row][cro] = i; row += 1; cro -= 1; } } } } void main() { int n; scanf("%d", &n); que(n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%d ", A[i][j]); } printf("\n"); } }