C語言 回形取數

2020-08-08 14:02:16

問題描述
  回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。
輸入格式
  輸入第一行是兩個不超過200的正整數m, n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。
輸出格式
  輸出只有一行,共mn個數,爲輸入矩陣回形取數得到的結果。數之間用一個空格分隔,行末不要有多餘的空格。

#include<stdio.h>
int main(){
	int n,m,count;
	scanf("%d%d",&n,&m);
	count=m*n;
	int a[n][m],i,j;
	for(i=0;i<n;i++){
	for(j=0;j<m;j++){
		scanf("%d",&a[i][j]);
	}
	}
	int t=0;
	i=0;j=0;
	while(count){
		while(i<n-t&&count){
			if(i==0&&j==0){
				printf("%d",a[0][0]);
				i++;
			}else
			printf(" %d",a[i++][j]);
			count--;
		}
		i--;
		j++;
		while(j<m-t&&count){
			printf(" %d",a[i][j++]);
			count--;
		}
		j--;
		i--;
		while(i>=t&&count){
			printf(" %d",a[i--][j]);
			count--;
		}
		i++;j--;
		while(j>t&&count){
			printf(" %d",a[i][j--]);
			count--;
		}
		j++;
		i++;
		t++;
	}
}