打印一个N*N的方阵,N为每边字符的个数,要求最外层为“X”,第二层为“Y”,从第三层起每层依次打印数字0,1,2,3,...
例子:当N =5,打印出下面的图形:
X X X X X
X Y Y Y X
X Y 0 Y X
X Y Y Y X
X X X X X
解决该问题的主要关键点就是根据方阵的下标(行标或者列标)判断某个元素属于方阵的第几层,然后按照要求打印字符即可,这里用i和j分别代表行标、列标,level代表方阵的第几层(层次从外向内依次为0,1,2,3...),判断元素位于第几层的关键代码为if ( (i == level) || (i == (N-level-1)) || (j == level) || (j == (N-level-1)) ),如果该条件成立,就代表元素处于level层,但要注意的是,使用这个条件只能从外层开始判断,代码如下
#include <stdio.h>
int main(void)
{
int level = 0; //层次从外层向内依次为0,1,2,3...
int level_max = 0;
int i =0, j = 0, N = 0;
puts("Enter a number");//num即为方阵的阶数,num可为任意范围的数字
scanf("%d",&N);
level_max = (N/2 + N%2);//计算方阵总的层数
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
for (level = 0; level < level_max ; level++)
{
if ( (i == level) || (i == (N-level-1)) || (j == level) || (j == (N-level-1)) )
{
if (level == 0)
{
if (j == (N-1))
{
//第0层的最后一列需要打印换行符
printf("X\n");
}
else
{
printf("X");
}
}
else if(level == 1)
{
printf("Y");
}
else
{
printf("%d", (level-2)%10);//level大于等于12时,打印的数字重新由0开始
}
//同一行不同列的元素可能会是不同level中的元素,确定其属于某一个level后就退出
break;
}
}
}
}
return 0;
}