理解题目:
首先一般的输出图形题都是可以从中找到规律的;
比如:
可以得到第一行和最后一行是“* ”一个星号加上一个空格,其他行都是一样的,当然每一行内容一定与输出值相关,那么可以采用双重for循环得到上述效果:
#include <stdio.h>
int main() {
int a;
while (scanf("%d ", &a) != EOF)
{
int i,j;
for(i=1;i<=a;i++)
{
for(j=1;j<=a;j++)
{
if((i==1)||(i==a))
printf("* ");
else
{
if((j==1)||(j==a))
printf("* ");
else
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
再比如:
可以观察到每一行的星号逐渐向中间靠拢,且上下左右对称,那么当然可以采用双重for循环解决:
#include <stdio.h>
int main()
{
int a;
while (scanf("%d ", &a) != EOF)
{
int i,j;
for(i=1;i<=a;i++)
{
for(j=1;j<=a;j++)
{
if((i==j)||(j==a-i+1))
printf("*");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}
此代码采用逐行输出,一行星号的位置正好是:
(i==j)||(j==a-i+1)
该列等于该行或是总数与该行之差加一;
该题也同样也从列入手:输出换行即可。
综上:
一般图形输出总有规律找到规律即可简单输出。