题目都看不懂,有人帮忙看看吗?
题目描述:生活中,逢年过节舞龙灯的传统,长长的龙身,可以一字展开,也可以盘曲起来。现在请你编程模拟盘龙的形状。为了简化,此处的盘龙形状不是圆形,而是方形。
模拟展示一个形如盘龙的数组呢?龙头在左上角,按顺时针方向由外向内盘踞。
输入:第一行为一个整数,表示测试用例的个数。其后的每一行,有个整数n(1 < = n < = 30 )。
输出:对每个n×n正方形数组,请参照输出样例,输出盘龙状数组。为了对齐,每个数组元素占4个字符宽度,并且,不足4个字符的按向右对齐输出。每个测试用例的输出之后有一个空行。
注意每行末尾没有空格。
样例输入:
3
1
2
5
样例输出:
1
1 2
4 3
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;
int a[20][20];
int main() {
int t,n,k,direct;
cin>>t;
for(int c=0; c<t; c++) {
direct=4;
cin>>n;
int i=0,j=0;
k=1;
memset(a,0,sizeof(a));
while(k<=n*n) {
if(a[i][j]==0) {
a[i][j]=k;
k++;
}
if(direct == 1) { //向上
i--;//行减1
if(i==-1||a[i][j]!=0) {
direct=4;
i++;
j++;
}
} else if(direct == 2) {
i++;
if(i==n||a[i][j]!=0) {
direct=3;
i--;
j--;
}
} else if(direct == 3) {
j--;
if(j==-1||a[i][j]!=0) {
direct=1;
i--;
j++;
}
} else if(direct == 4) {
j++;
if(j==n||a[i][j]!=0) {
direct=2;
i++;
j--;
}
}
}
for(i=0; i<n; i++) {
for(j=0; j<n; j++) {
cout<<setw(4)<<a[i][j] <<" ";
}
cout<<endl;
}
cout<<endl;
}
return 0;
}