codeup27969 蛇形填字母
时空限制 1000ms/128MB
题目描述
你对迷宫感兴趣吗?现在请你设计一个迷宫,要求你输入一个整形数字n(0<n<101),然后就形成一个n*n规模的迷宫方阵。 若输入是 5,那么将会输出如下迷宫。迷宫按字母顺序从外向内旋转,若26个字母用完则从A开始循环使用。
A B C D E
P Q R S F
O X Y T G
N W V U H
M L K J I
输入
第一行输入一个整数T,这个数字为测试数据的个数。从第二行开始会有T行测试数据,
每行测试数据输入一个数n,表示迷宫的规模。
输出
与测试数据对应,刚好有T个迷宫。在每个迷宫中,注意每行中每两个字母间有一个空
格,每行最后一个字母后没有空格。
样例输入
3
3
4
6
样例输出
A B C
H I D
G F E
A B C D
L M N E
K P O F
J I H G
A B C D E F
T U V W X G
S F G H Y H
R E J I Z I
Q D C B A J
P O N M L K
代码
#include<iostream>
#include<cstring>
using namespace std;
const int N = 105;
char a[N][N];
int main(){
int T,n,x,y,k;
cin>>T;
while (T--){
cin>>n;
memset(a,0,sizeof(a));
char ch=a[1][1]='A';
x=y=k=1;
while (k<n*n){
while (y+1<=n && !a[x][y+1]) a[x][++y]=(++ch)>'Z'?ch-=26:ch,k++;
while (x+1<=n && !a[x+1][y]) a[++x][y]=(++ch)>'Z'?ch-=26:ch,k++;
while (y-1>=1 && !a[x][y-1]) a[x][--y]=(++ch)>'Z'?ch-=26:ch,k++;
while (x-1>=1 && !a[x-1][y]) a[--x][y]=(++ch)>'Z'?ch-=26:ch,k++;
}
for (int i=1; i<=n; i++){
for (int j=1; j<n; j++) cout<<a[i][j]<<" ";
cout<<a[i][n]<<endl;
}
}
return 0;
}