题解 | 蛇形矩阵
蛇形矩阵
https://www.nowcoder.com/practice/f228a074c5274619b26be544962375e1
#include <stdio.h> int main() { int n = 0; scanf("%d", &n); int matrix[n][n]; int num = 1; int flag = 1; //flag=1表示向右上运动,flag=-1表示向左下运动 int x = 0; //表示此刻位置的行下标 int y = 0; //表示此刻位置的列下标 while (num <= n * n) { if (1 == flag) //向右上方运动 { while (x >= 0 && y <= n-1) //没有越过上边界和右边界 { matrix[x][y] = num; ++num; --x; ++y; //继续向右上运动 } if (x < 0 && y <= n-1) //越过上边界但是没有越过右边界 { ++x; --y; //向左下方回退一格 ++y; //改为向正右方移动一格 flag = -1; //改变运动方向 } else // 越过右边界 { ++x; --y; //向左下方回退一格 ++x; //改为向正下方移动一格 flag = -1; //改变运动方向 } } else //向左下运动 { while (x <= n-1 && y >= 0 ) //没有越过下边界和左边界 { matrix[x][y] = num; ++num; ++x; --y; //继续向左下运动 } if (x <= n-1 && y < 0) // 越过左边界但是没有越过下边界 { --x; ++y; //向右上方回退一格 ++x; //改为向正下方移动一格 flag = 1; //改变运动方向 } else //越过下边界 { --x; ++y; //向右上方回退一格 ++y; //改为向正右方移动一格 flag = 1; //改变运动方向 } } } for (int i=0; i<n; ++i) { for (int j=0; j<n; ++j) { printf("%d ", matrix[i][j]); } printf("\n"); } return 0; }