描述
给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示:
输入
输入的第一行上有两个整数,依次为row和col。
余下有row行,每行包含col个整数,构成一个二维整数数组。
(注:输入的row和col保证0 < row < 100, 0 < col < 100)
输出
按遍历顺序输出每个整数。每个整数占一行。样例输入
4 4 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7样例输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
题意
将数组按回形从外向内顺时针顺序输出
思路
从初始位置开始,我们从左往右开始输出,直到检测此时数组的内容为0。
从1给予的初始位置开始,我们从上往下开始输出,直到检测此时数组的内容为0
从2给予的初始位置开始,我们从右往左开始输出,直到检测此时数组的内容为0
从3给予的初始位置开始,我们从下往上开始输出,直到检测此时数组的内容为0
以此循环
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int r,c,a[110][110],x,y,r1,r2,c1,c2;
cin>>r>>c;
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
cin>>a[i][j];//输入数组
}
}
r1=0;r2=r-1;c1=0;c2=c-1;
while(r1<=r2 && c1<=c2){
for(int j=c1;j<=c2;j++){
cout<<a[r1][j]<<endl;//行,从左到右输出
}r1++;
for(int i=r1+1;i<=r2;i++){
cout<<a[i][c2]<<endl;//列,从上到下输出
}c2--;
if(r1!=r2){
for(int j=c2-1;j>=c1;j--){
cout<<a[r2][j]<<endl;//行,返回,从左到右输出
}r2--;
}
if(c1!=c2){
for(int i=r2-1;i>=r1+1;i--){
cout<<a[i][c1]<<endl;//列,返回,从下到上输出
}c1++;
}
}
}