回形取数蓝桥杯C语言

回形取数 蓝桥杯 C语言

Description

回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。

Input

输入描述:
  输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
输入样例:
3 3
1 2 3
4 5 6
7 8 9

Output

输出描述:
  输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
输出样例:
1 4 7 8 9 6 3 2 5

Sample Input 1

参考上文
Sample Output 1

参考上文
Hint

HINT:时间限制:1.0s 内存限制:512.0MB
Source

代码

#include <stdio.h>
int main(){
	int m,n;
	scanf("%d%d",&m,&n);
	int a[m][n];
	int i,j,sum;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++){
	         scanf("%d",&a[i][j]);
		} 
	}
	//输入数据
	
	sum=m*n;    //sum控制遍历所有数组
	i=-1;j=0;
	while(sum){
		while(a[++i][j]!=-1 && i<m){
			printf("%d ",a[i][j]);
			a[i][j]=-1;
			sum--;
		}
		//左列-向下,每遍历一个值变为-1,成为控制向左转的条件之一
		i--;  //此时i=m,
		while(a[i][++j]!=-1 && j<n){
			printf("%d ",a[i][j]);
			a[i][j]=-1;
			sum--;
		}//底行-向右
		j--;
		while(a[--i][j]!=-1 && i>-1){
			printf("%d ",a[i][j]);
			a[i][j]=-1;
			sum--;
		}//右列-向上
		i++;
		while(a[i][--j]!=-1 && j>0){
			printf("%d ",a[i][j]);
			a[i][j]=-1;
			sum--;
		}//顶行-向右
		j++;
	}
	return 0;
}

调试

在这里插入图片描述
在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页