题解 | #蛇形矩阵#
蛇形矩阵
https://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e
#include <iostream>
#include <vector>
using namespace std;
void print(vector<int> v) {
vector<int>::iterator it = v.begin();
for (it; it != v.end(); it++) {
cout << *it << ' ';
}
cout << endl;
}
int main() {
int n;
while (cin >> n) {
// 动态申请数组,把vector<int>当做数据类型传给最外层的vector
vector<vector<int>> v(n);
for (int j = n - 1; j >= 0; j--) {
v[j].resize(j + 1); // 循环申请空间,例如n=5,v[4]就有5个空间,v[3]有4个空间
}
for (int i = 0; i < n / 2; i++) {
v[i].swap(v[n - 1 - i]); // 交换0-4,1-3,保证后续输出易读
}
v[0][0] = 1; // v[i][j]=v[i][j-1]+i+j+1 // v[i][j]=v[i-1][j]+i+j // v[i][0] = v[i - 1][0] + i;
for (int i = 1; i < n; i++) {//第一列
v[i][0] = v[i - 1][0] + i;
}
for (int i = 1; i < n; i++) {//第一行
v[0][i] = v[0][i - 1] + i + 1;
}
for (int i = 1; i <= n - 2;i++) {//例如n=5 这里i=1/2/3循环三次
for (int j = n - 1-i; j >= 1; j--) {//例如n=5 j=3/2/1
v[i][j] = v[i - 1][j] + i + j;
}
}
// 打印
for (int i = 0; i < n; i++) {
print(v[i]);
}
}
// 不建议使用system("pause"),可以直接返回0结束程序
return 0;
}
自己写好难,先把第一行第一列打印出来 然后按照规律进行赋值 太难了 这一题写了我两个小时

查看12道真题和解析