回形取数

Description

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

Input
输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。

Output
输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。

Sample Input 1

3 3
1 2 3
4 5 6
7 8 9
Sample Output 1

1 4 7 8 9 6 3 2 5
Sample Input 2

3 2
1 2
3 4
5 6
Sample Output 2

1 3 5 6 4 2

#include <iostream>
using namespace std;
int main(){
	int m,n;
	cin>>m>>n;
	int sum=m*n;
	long int array[m][n]={};
	for(int i=0;i<m;i++)
		for(int j=0;j<n;j++)
		   cin>>array[i][j];
	for(int h=m,i=n,o=0;h>0&&i>0;){	
		if(h-o==1&&i-o==1&&sum>0){
			cout<<array[o][o];
			sum--;
		}
	    else if(h-o==1&&i-o!=1){
		     for(int l=0;l<i&&sum>0;l++){
				 cout<<array[o][o+l]<<' ';
				 sum--;
			 }
			     
	    }
	    else if(i-o==1&&h-o!=1)
		     for(int k=0;k<h&&sum>0;k++){
				 cout<<array[k+o][o]<<' ';
				 sum--;
			 }
			     
	    else{
		int k=o,l=o;
         	for(;k<h-1&&l<i-1&&sum>0;k++){
				cout<<array[k][l]<<' ';
				sum--;
			}
        	for(;k<h&&l<i-1&&sum>0;l++){
				cout<<array[k][l]<<' ';
			    sum--;
			}
		        
        	for(;k>o&&l<i&&sum>0;k--){
				cout<<array[k][l]<<' ';
			    sum--;
			}
		       
	       for(;l>o&&sum>0;l--){
			   cout<<array[k][l]<<' ';
		       sum--;
		   }
		       
	}
		o++;
		h-=1;
		i-=1;
	}
	
}

总之,这道题看起来挺简单的,但是其中的细节很让人抓狂,这个代码看起来真的很麻烦,望大佬指教。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值