codeup27971 蛇形展开
时空限制 1000ms/128MB
题目描述
将方阵从左上角开始分别按先右后左下方向,数据间隔一个空格。
输入
共输入n+1行数据
第一行输入整数n(1<=n<=20)
第2~n+1行,每行n个整数
输出
一行数据,n*n个整数,按输入方阵从左上角开始分别按先右后左下角方向展开,数据间间隔一个空格,最后没有空格。
样例输入
4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
样例输出
1 2 5 9 6 3 4 7 10 13 14 11 8 12 15 16
代码
#include<iostream>
using namespace std;
const int N = 25;
int a[N][N];
int main(){
int n,x,y,k;
cin>>n;
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++) cin>>a[i][j];
cout<<a[1][1];
x = y = k = 1;
while (k<n*n){
if (y<n) { cout<<" "<<a[x][++y]; k++; }
else { cout<<" "<<a[++x][y]; k++; }
while (x+1<=n && y-1>=1) { cout<<" "<<a[++x][--y]; k++; }
if (x<n) { cout<<" "<<a[++x][y]; k++; }
else { cout<<" "<<a[x][++y]; k++; }
while (x-1>=1 && y+1<=n) { cout<<" "<<a[--x][++y]; k++; }
}
cout<<endl;
return 0;
}