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 }
没有什么能阻止我对知识的追求!!!