一、要求
输入:
5输出:
* * * * * * * * *输入:
6输出:
* * * * ** ** * * * *
二、思路
1)通过要求可得出,输入n就要输出一个n行n列的x 。
2)由 1)中的总结,可将x中的所有 * 抽象成各个坐标。
3)由 2)可得(如下所示)
-------------------------------------------------------
-------------------------------------------------------
a、由上图可知,(1,1)(2,2)(3,3)...(n,n)...的坐标中都有 * 。
-------------------------------------------------------
b、由上图还可知 :当输入为5时(1,5)(2,4)(3,3)...的坐标都有 * 。
当输入为6时(1,6) (2,5) (3,4)...的坐标都有 * 。
由a,b可以设i为行,j为列,i==j 时打印 * ,i-a+1==j 时打印 *
三、代码实现
#include <stdio.h>
int main() {
int a=0;
while(scanf("%d",&a)!=EOF)
{
int i=0; //行
int j=0; //列
for(i=1;i<=a;i++)
{
for(j=1;j<=a;j++)
{
if(j==i)
{
printf("*");
}
else if(j==(a-i+1))
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
四、个人总结
难度:中等
此图形类型的题,个人认为要将其抽象为一个二维坐标,确定行列后,找符号与符号之间的规律,未必所有符号都满足一个规律,可能这些符号需要两个及以上的规律才能总结,就好比此题行和列数值相等是一个规律,而列等于输入值减行加一是第二个规律,因此要多总结、多思考,不要固化思想,才可以在做题时游刃有余。