问题 B: 打印图形
时间限制: 1 Sec 内存限制: 128 MB
题目描述
你对迷宫感兴趣吗?现在请你设计一个迷宫,要求你输入一个整形数字n(0<n<101),然后就形成一个n * n规模的迷宫方阵。
若输入的是5,那么将会输出如下迷宫。迷宫的按字母顺序从外向内旋转,若26个字母用完则从A开始循环使用。
A BC 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个迷宫。在每个迷宫中,注意每行中每两个字母间有一个空格,每行最后一个字母后没有空格。
样例输入
3346
样例输出
A B CH I DG F EA B C DL M N EK P O FJ I H GA B C D E FT U V W X GS F G H Y HR E J I Z IQ D C B A JP O N M L K
提示
//QUST 1227
//问题 B: 打印图形
#include<stdio.h>
#define UL 1
#define UR 2
#define DL 3
#define DR 4
#define ABLE 1
char square[101][101];
char ch(int seset); //ch(1)重置字母取值
char ch(int reset){
static char thec = 64;
if(reset==1){
thec=64;
return 0;
}
thec += 1;
if(thec > 90)
thec = 65;
return thec;
}
void reset(int n);
void reset(int n){
int x,y;
ch(1);
for(x=0;x<101;x++)
for(y=0;y<101;y++)
square[x][y] = NULL;
for(x=1;x<=n;x++)
for(y=0;y<=n;y++)
square[x][y] = ABLE;
}
void build(int n);
void build(int n){
int status;
status = UL;
int count;
int x=1,y=1;
square[x][y]=ch(0);
for(count=1;count<n*n;count++){
switch (status){
case UL:
if(square[x+1][y]==ABLE){
x++;
square[x][y]=ch(0);
}
else{
status=UR;
y++;
square[x][y]=ch(0);
}
break;
case UR:
if(square[x][y+1]==ABLE){
y++;
square[x][y]=ch(0);
}
else{
status=DR;
x--;
square[x][y]=ch(0);
}
break;
case DR:
if(square[x-1][y]==ABLE){
x--;
square[x][y]=ch(0);
}
else{
status=DL;
y--;
square[x][y]=ch(0);
}
break;
case DL:
if(square[x][y-1]==ABLE){
y--;
square[x][y]=ch(0);
}
else{
status=UL;
x++;
square[x][y]=ch(0);
}
break;
}
}
}
void display(int n);
void display(int n){
int x,y;
for(y=1;y<=n;y++){
for(x=1;x<=n;x++){
printf("%c",square[x][y]);
if(x!=n)
printf(" ");
}
if(y!=n)
printf("\n");
}
}
int main() //输入的n为1~100
{
int T;
int count;
int n;
scanf("%d",&T);
for(count=1;count<T;count++){
scanf("%d",&n);
reset(n);
build(n);
display(n);
printf("\n");
}
scanf("%d",&n);
reset(n);
build(n);
display(n);
return 0;
}
麻烦了吧……我一定是写麻烦了吧……所以说我还是要提高自己的水平你晓得不晓得啊。