题目:要求编程输出这样一个N*N方阵(3<=N<=20)
T T T T T T T T T T T T T T T
T J J J J J J J J J J J J J T
T J 1 1 1 1 1 1 1 1 1 1 1 J T
T J 1 2 2 2 2 2 2 2 2 2 1 J T
T J 1 2 3 3 3 3 3 3 3 2 1 J T
T J 1 2 3 4 4 4 4 4 3 2 1 J T
T J 1 2 3 4 5 5 5 4 3 2 1 J T
T J 1 2 3 4 5 6 5 4 3 2 1 J T
T J 1 2 3 4 5 5 5 4 3 2 1 J T
T J 1 2 3 4 4 4 4 4 3 2 1 J T
T J 1 2 3 3 3 3 3 3 3 2 1 J T
T J 1 2 2 2 2 2 2 2 2 2 1 J T
T J 1 1 1 1 1 1 1 1 1 1 1 J T
T J J J J J J J J J J J J J T
T T T T T T T T T T T T T T T
即它的最外面一层T,第二层为J,第三层为1,第四层为2,—
思路:主要是求出 phalanx[i][j] 处于第几层,这 可用 space[4] 来,分别存 i,j,N-1-i,n-1-j, 分别代表这个字符与上左下右的距离为多少,数组 space[4] 中最小的数即为该字符的 层数。
代码:
#include <stdio.h>
#include <conio.h>
#define N 15
void main ()
{
int i,j,k;
char phalanx[N][N];
int space[4];
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
space[0] = i;
space[1] = N-1-i;
space[2] = j;
space[3] = N-1-j;
for(k=1;k<4;k++)
{
if(space[k]<space[0])
space[0] = space[k];
}
switch(space[0])
{
case 0: phalanx[i][j] = 'T';break;
case 1: phalanx[i][j] = 'J';break;
case 2: phalanx[i][j] = '1';break;
case 3: phalanx[i][j] = '2';break;
case 4: phalanx[i][j] = '3';break;
case 5: phalanx[i][j] = '4';break;
case 6: phalanx[i][j] = '5';break;
case 7: phalanx[i][j] = '6';break;
case 8: phalanx[i][j] = '7';break;
case 9: phalanx[i][j] = '8';break;
case 10: phalanx[i][j] = '9';break;
}
}
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%c ",phalanx[i][j]);
printf("/n");
}
getch();
}