#include <stdio.h>
int main(void) {
int arr[102][102];
int row, col; //右上边界标记(行列数)
scanf("%d %d", &row, &col);
//存数
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
scanf("%d", &arr[i][j]);
}
}
//取数 当到达最后一个数,结束
int i = 0, j = 0; //总数标记
int x = 0, y = 0; //左下边界标记
int k = 1; //方向标记
int t = 1;
int all = row * col;
for (int m = 0; m < all; m++) {
if (k == 1) { //向右
k++;
for (; j < col; j++)
printf("%d\n", arr[i][j]);
j--;
col -= 1;
} else if (k == 2) { //向下
i++;
k++;
for (; i < row; i++)
printf("%d\n", arr[i][j]);
i--;
row -= 1;
} else if (k == 3) { //向左
j--;
k++;
for (; j >= y; j--)
printf("%d\n", arr[i][j]);
j++;
y++;
} else if (k == 4) { //向上
i--;
k++;
for (; i > x; i--)
printf("%d\n", arr[i][j]);
i++;
x++;
} else if (k == 5) { //向右(非第一行)
j++;
k = 2;
for (; j < col; j++)
printf("%d\n", arr[i][j]);
j--;
col -= 1;
}
}
}
这个是题目,其他情况下都没问题,就是当row<col的时候会出现多输出了前一个数,没找出来是哪里的问题