题解 | #蛇形矩阵# 模拟矩阵构造过程
蛇形矩阵
http://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e
维护行指针 r
和列指针 c
,移动两个指针构造整个矩阵。
蛇形矩阵满足条件:
- 第一个格子始终是1;
- 当
r
为0
时,下一位r
为当前c + 1
; 下一位c
为0
; - 如果
r
和c
不满足条件2,那么下一位r
为 当前r - 1
,下一位c
为 当前c + 1
;
#include<bits/stdc++.h> using namespace std; int main() { int n; for (; cin >> n;) { vector<vector<int>> grid; for (int r = 0; r < n; r++) { vector<int> row(n - r, 0); grid.push_back(row); } for (int r = 0, c = 0, t = 0; r < n && c < grid[r].size();) { grid[r][c] = t + 1; t = grid[r][c]; if (!r) { r = c + 1; c = 0; } else { r--; c++; } } for (int r = 0; r < n; r++) { for (int c = 0; c < grid[r].size(); c++) { cout << grid[r][c] << ' '; } cout << endl; } } return 0; }