756蛇形矩阵

输入两个整数 n和 m,输出一个 n 行m 列的矩阵,将数字1 到 n*m按照回字蛇形填充至矩阵中。

具体矩阵形式可参考样例。

输入格式

输入共一行,包含两个整数 n和m m

 

输出格式

输出满足要求的矩阵。矩阵占 n行,每行包含 m个空格隔开的整数。

数据范围

0 <= n m <= 100

输入样例:

3 3

输出样例:

1 2 3
8 9 4
7 6 5

 

 思路

我们一共需要填充n * m 个数字,数字在矩阵中顺时针方向旋转,我们可以用两个数组控制方向。

 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 int f[110][110];
 6 int dx[] = {0, 1, 0, -1}; //x 轴延申 
 7 int dy[] = {1, 0, -1, 0}; //y 轴延申 
 8 int main() {
 9     int n, m;
10     cin >> n >> m;
11     int d = 0; //控制其向那个方向延申 
12     int x, y; //当前位置 
13     x = 1, y = 1;
14     for(int i = 1; i <= n * m; i ++) {
15         f[x][y] = i; //赋值 
16         int a = x + dx[d], b = y + dy[d]; //变化 
17         if(a < 1 || a > n || b < 1 || b > m || f[a][b]) { //如果到边界了就换方向延申 
18             d = (d + 1) % 4;
19             a = x + dx[d], b = y + dy[d];
20         } 
21         x = a, y = b;
22     }
23     
24     for(int i = 1; i <= n; i ++) { //输出矩阵 
25         for(int j = 1; j <= m; j ++)
26             cout << f[i][j] << ' ';
27         puts("");
28     }
29          
30     return 0;
31 }

 

posted @ 2022-10-04 19:45  Luli&  阅读(22)  评论(0编辑  收藏  举报