給定一個 m 行、n 列的矩陣,請按照順時針螺旋的順序輸出矩陣中所有的元素。
輸入格式
首先在第一行輸入 2 個整數,分別對應題目描述中的 mm 和 nn(1 \leq m,n \leq 1001≤m,n≤100),之間用一個空格分隔。接下來輸入 m 行,每行包含 n 個整數
輸出格式
輸出爲一行,包括 m\times nm×n 個整數,按照題目要求的順序依次輸出所有矩陣元素,任意兩個整數之間用一個空格分隔,最後一個整數後面沒有空格。
#include <stdio.h>
int main() {
int matrix[100][100];
int m;
int n;
scanf("%d %d",&m,&n);
for(int i = 0;i < m; ++i){
for(int j = 0;j < n; ++j){
scanf("%d ",&matrix[i][j]);
}
}
int i = 0,j = 0,count = 0,k = m * n;
//上下左右四個邊界
int top = 0,left = 0;
int bottom = m-1,right = n-1 ;
while(1){
//從左上開始,列印行
for(i = top,j = left; j <= right; ++j){
printf("%d",matrix[i][j]);
count++;
if(count == k) return 0;
printf(" ");
}
++top;//更新邊界條件
//從右上開始列印列
for(i = top,j = right;i <= bottom; ++i )
{
printf("%d",matrix[i][j]);
count++;
if(count == k) return 0;
printf(" ");
}
--right;
for(i = bottom,j = right;j >= left; --j )
{
printf("%d",matrix[i][j]);
count++;
if(count == k) return 0;
printf(" ");
}
--bottom;
for(i = bottom,j = left;i >= top; --i )
{
printf("%d",matrix[i][j]);
count++;
if(count == k) return 0;
printf(" ");
}
++left;
}
return 0;
}