打印一个 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");
}