求更好的方法
打印一个 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
#include<stdio.h>
#include<stdlib.h>
//这里主要是运用了规则矩阵的操作
void main()
{
int i ,j,flag_i,flag_j, N;
char a[200];
printf("输入一个数N(3<N<20)");
scanf("%d",&N);
if(( N>=20 )||(N<=3)) //主要对输入的数做一定的要求
{
printf("输入的数据有问题");
exit(0);
}
for (i = 0;i < (N+1)/2;i++)//利用一个一维数组进行存储这些矩阵
{
for(j = 0;j <=i;j++)
{
if(j==0)
a[i*(i-1)+j]='T';
else
{
if(j==1)
a[i*(i-1)+j]='J';
else
a[i*(i-1)+j]='0'+j-1;
}
}
}
for(i=0;i<N;i++) //按要求对所存储的矩阵进行展开
{
flag_i = i;
for(j=0;j<N;j++)
{
flag_j = j;
if(i>=(N+1)/2)
i=N-i-1;
if(j>=(N+1)/2)
j=N-j-1;
if(j<=i)
printf("%c",a[i*(i-1)+j]);
else
printf("%c",a[j*(j-1)+i]);
j=flag_j;
}
i=flag_i;
printf("\n");
}
}