- 大致思路:
仔细观察图形,可以发现,图形都中是由空格和*按照不同个数的输出组成的。
在菱形图案和箭型图案中我们可分上部分和下部分分别输出
而X形和,空心正方形视作整体一次性输出
重点是找规律!!
菱形
- 上三角:先输出空格,后输出
每行中空格:从上往下,一行减少一个:2i+1的方式递增
下三角:先输出空格,后输出
每行中空格:从上往下,每行多一个空格: 2(line-1-i)-1的方式递减
line表示总共有多少行
按照上述方式,将上三角和下三角中的空格和*分别输出即可
int main()
{
int line = 0;
int i = 0;
scanf("%d", &line);//7
//打印上半部分
for(i=0; i<line; i++)
{
//打印一行
//打印空格
int j = 0;
for(j=0; j<line-1-i; j++)
{
printf(" ");
}
//打印*
for(j=0; j<2*i+1; j++)
{
printf("*");
}
printf("\n");
}
//打印下半部分
for(i=0; i<line-1; i++)
{
//打印一行
int j = 0;
for(j=0; j<=i; j++)
{
printf(" ");
}
for(j=0; j<2*(line-1-i)-1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
箭形
- 上一半:空格每次输出两个 递减 *每次递增一个
下一半相反
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d", &n) != EOF)
{
//上n行
int i = 0;
for(i=n; i>0; i--)
{
int j = 0;
for(j=0; j<i; j++)
{
printf(" ");
}
for(j=0; j<=n-i; j++)
{
printf("*");
}
printf("\n");
}
//下n+1行
for(i=n+1; i>0; i--)
{
int j = 0;
for(j=0; j<n+1-i;j++)
{
printf(" ");
}
for(j=0; j<i; j++)
{
printf("*");
}
printf("\n");
}
}
return 0;
}
X形
- X形图案可以拆分成两根斜线,其中i=j时输出星号,或者i=n-i-1时输出星号,其余皆输出空格
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d", &n) != EOF)
{
int i = 0;
int j = 0;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(i == j)
printf("*");
else if(i+j == n-1)//因为行和列是从0开始的
printf("*");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}
空心正方形
- 特殊处理第一行和最后一行,为满星
- 中间的行的首尾为*,其余皆为空格
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d", &n) != EOF)
{
int i = 0;
int j = 0;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(i==0 || i==n-1)
printf("* ");
else if(j==0 || j==n-1)
printf("* ");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}
ps:写文章的时候怎么打出连续的*啊 每次都变成斜体 或者间隔线,真的会谢啊啊啊啊啊啊啊啊啊