本文最后更新于 2023年9月16日 早上
NOI CCF 1046.打印方阵
题目描述 打印一个n*n的数字方阵,例如n=4时:(n<=100) 1 3 4 10 2 5 9 11 6 8
12 15 7 13 14 16
输入 输入n。
输出 输出n*n的方阵。
样例输入 4
样例输出
1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16
题目分析
- 用二维数组储存
- 用n的奇偶判断Z型走向
- 补足特殊情况
- 常规双循环输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #include<iostream> using namespace std;
int a[103][103], x, y, k, n;
int main() { cin >> n; x = y = k = 0; a[x][y] = ++k; for (int i = 0; i < n; i++) { if (i % 2 == 1) { for (int j = 0; j < i; j++) a[++x][--y] = ++k; a[++x][y] = ++k; } else { for (int j = 0; j < i; j++)a[--x][++y] = ++k; a[x][++y] = ++k; } }
if (n % 2 == 1)y--, x++; else y++, x--; a[x][y] = k;
for (int i = n - 2; i > 0; i--) if (i % 2 == 1) { for (int j = 0; j < i; j++)a[++x][--y] = ++k; a[x][++y] = ++k; } else { for (int j = 0; j < i; j++)a[--x][++y] = ++k; a[++x][y] = ++k; }
for (int y = 0;y < n; y++) { for (int x = 0;x < n; x++) { cout << a[x][y] << " "; } cout << endl; } return 0; }
|