题目描述
输入两个整数 �n 和 �m,输出一个 �n 行 �m 列的矩阵,将数字 11 到 �n×�m 按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入格式
输入共一行,包含两个整数 �n 和 �m。
输出格式
输出满足要求的矩阵。 矩阵占 �n 行,每行包含 �m个空格隔开的整数。
样例
输入数据 1
3 3
Copy
输出数据 1
1 2 3
8 9 4
7 6 5
Copy
数据范围
1≤�,�≤100.1≤n,m≤100.
代码题解:
#include <bits/stdc++.h>
using namespace std;
long long n, m, a[105][105] = {0}, x = 1, y = 1, s = 1;
int main() {
cin >> n >> m; //n行m列
a[x][y] = s; //第一行第一列永远是1
while (s < n * m) { //一共有n*m个数,s等于n的时候结束
while (a[x][y + 1] == 0 && y + 1 <= m) { //第一行第一列向右一直到第m列
y++;
s++;//按蛇形的方向一直加加
a[x][y] = s;
}
while (a[x + 1][y] == 0 && x + 1 <= n) {//第一行第m列向下一直到第n行第m列
x++;
s++;//按蛇形的方向一直加加
a[x][y] = s;
}
while (a[x][y - 1] == 0 && y - 1 >= 1) {//第n行第m列向左一直到第n行第一列
y--;
s++;//按蛇形的方向一直加加
a[x][y] = s;
}
while (a[x - 1][y] == 0 && x - 1 >= 1) {//第n行第一列向上一直到第二行第一列
x--;
s++;//按蛇形的方向一直加加
a[x][y] = s;
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cout << a[i][j] << " ";//输出n行m列
}
cout << endl;
}
return 0;
}