打印图形

来源:互联网 发布:济南公交 大数据 编辑:程序博客网 时间:2024/05/01 16:32
题目描述

你对迷宫感兴趣吗?现在请你设计一个迷宫,要求你输入一个整形数字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 <stdio.h> 
#include <stdlib.h> 
int main()

     char a[101][101]; 
     char flag; 
     int x,y,T,m,n,k,p; 
     int f(int x,int y,int n);   
       scanf("%d",&T); 
       for(int i=1;i<=T;i++) 
       { 
              scanf("%d",&n); 
              m=1;   x=y=1; 
              flag='A'; p=n*n;
              while(m<=p)   
             {
                  a[x][y]=flag;      flag++;  
                  if(flag==91)      flag='A';//注意这个题是循环使用字母 
                  k=f(x,y,n); 
                  switch(k)
                   {            
                     case 1:x++;break; 
                     case 2:y++;break; 
                     case 3:x--;break; 
                     case 4:y--;break; 
                    }
                  m++; 
              }
              for(int l=1;l<=n;l++)
              {        
              for(int j=1;j<=n-1;j++)
                   {
                        printf("%c ",a[j][l]); 
                    } 
                    printf("%c\n",a[n][l]); 
              }        
       } 
         return 0;
 } 
 int f(int x,int y,int n)//划分区域,分类讨论
 {     while(1) 
       {
        if(x>=y&&x+y<=n)      
          {            return 1;         break;      }   
        if(x+1==y&&x+y<=n) 
          {  return 1;        break;   } 
        if(x>y&&x+y>n)    
          {   return 2;             break;           }   
        if(x<=y&&x+y>n+1) 
          {      return 3;           break;          } 
         if(x<y&&x+y<=n+1&&x+1!=y) 
          {       return 4;            break;        }
            break; 
        }          
 } 


0 0