【OJ】QUST 1227

问题 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;
}


麻烦了吧……我一定是写麻烦了吧……所以说我还是要提高自己的水平你晓得不晓得啊。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值