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;
}
}
总之,这道题看起来挺简单的,但是其中的细节很让人抓狂,这个代码看起来真的很麻烦,望大佬指教。