N*N 的方阵

来源:互联网 发布:触摸屏展示软件 编辑:程序博客网 时间:2024/04/27 17:11

打印一个 N*N 的方阵,N为每边           N=15  打印出下面图形
 字符的个数(3<N<20), 要求最               TTTTTTTTTTTTTTT
 外一层为"T", 第二层为"J", 从第三层               TJJJJJJJJJJJJJT
 起每层依次打印数字 1,2,3,...                     TJ11111111111JT
 (右图以N为15为例)                           TJ12222222221JT
                                                  TJ12333333321JT
                                                  TJ12344444321JT
                                                  TJ12345554321JT
                                                  TJ12345654321JT
                                                  TJ12345554321JT
                                                  TJ12344444321JT
                                                  TJ12333333321JT
                                                  TJ12222222221JT
                                                  TJ11111111111JT
                                                  TJJJJJJJJJJJJJT
                                                  TTTTTTTTTTTTTTT


思路:从外层到内层,先将T和J打印,在打印数字。
      利用数组将处在同一层的元素赋同值
缺点:四个角重复赋值
#include<stdio.h>

void Fun(int );

int main(void)
{
    int n;
 scanf("%d",&n);
 Fun(n);
 return 0;
}

void Fun(int N)
{
 char A[18][18];
 char (*p)[18];
 p =A;
 int x=2,y=N-3,c=49;
 for(int i=0;i<N;i++)
 {
  A[0][i] ='T';
  A[i][0] ='T';
  A[N-1][i] ='T';
  A[i][N-1]='T';
 }
 for(int j=1;j<N-1;j++)
 {
  A[1][j]='J';
  A[j][1]='J';
  A[N-2][j]='J';
  A[j][N-2]='J';
 }
 while(x<=y)
 {
  for(int k=x;k<y+1;k++)
  {
   A[x][k]=c;
   A[k][x]=c;
   A[y][k]=c;
   A[k][y]=c;
  }
  x++;
  y--;
  c++;
 }
 for(int a=0;a<N;a++)
  for(int b=0;b<N;b++)
  {
   printf("%c",*(*(p+a)+b));
   if(b==N-1)
    printf("/n");
  }
  printf("/n");

原创粉丝点击