将矩阵转45°后进行存储和遍历输出,边界条件更好判断
#include <iostream>
using namespace std;
const int N = 1010;
int out[2*N][2*N];
int n;
int main() {
cin >> n;
int st = 1;
for (int i = 1; i <= 2 * n - 1; i++) {
if (i <= n) {
if (i % 2 != 0)
for (int j = 1; j <= i; j++)
out[i][j] = st++;
else
for (int j = i; j >= 1; j--)
out[i][j] = st++;
}
else {
if (i % 2 != 0)
for (int j = 1; j <= n - i % n; j++)
out[i][j] = st++;
else
for (int j = n - i % n; j >= 1; j--)
out[i][j] = st++;
}
}
for (int i = 1; i <= n; i++) {
int x = i, y = 1;
for (int j = 0; j < n; j++) {
cout << out[x][y] << " ";
if (x < n) {
x++;
y++;
}
else {
x++;
}
}
cout << endl;
}
}

京公网安备 11010502036488号