前言
哈喽,各位小伙伴们大家好!今天小编给大家带来打印菱形图案题目的思路分析和讲解。这道题需要经过观察规律进行分析才能解题。可以提升我们的思维和观察能力。话不多说,咱们进入主题!
题目描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的菱形图案。
输入描述:
多组输入,一个整数(2~20)。
输出描述:
针对每行输入,输出用“*”组成的菱形,每个“*”后面有一个空格。
思路分析
类似的图案打印问题我们都可以用两层循环嵌套来进行解答,第一次嵌套为每一行的列,第二次嵌套为每一行;如:
int main()
{
int h = 10;//h:表示行数
int l = 10;//l:表示列数
int i = 0;
for (i = 0; i < h; i++)
{
for (int j = 0; j < l; j++)
{
//每一行的每一列
}
printf("\n");//换行
}
return 0;
}
其中h表示行数,做题时我们一般用scanf来获取;
l表示列数,做题时我们要分析每一列的关系,把该关系写在最内层循环里面;
printf(“\n”)是为了换行。
所以我们的关键为找到列的规律
以上思路是做图案题应该想到的思路,把图案转换成平面之间坐标系,非常的好用。
寻找规律
总体分析
通过观察我们可以发现,棱形可以分为上下两个部分,下部分就是上部分的颠倒,所以我们只需要找到上部分的规律即可求解!
上半部分分析
观察示例1上部分我们可以发现:上半部分一共有3行
第一行打2个空格,然后打1个*;
第二行打1个空格,然后打2个*;
第三行打0个空格,然后打3个*
观察示例2上部分我们可以发现:上半部分一共有4行
第一行打3个空格,然后打1个*;
第二行打2个空格,然后打2个*;
第三行打1个空格,然后打3个*
第四行打0个空格,然后打4个*
所以我们得到结论:当输入n时:
上半部分一共有n+1行
第一行打n个空格,然后打1个*;
第二行打n-1个空格,然后打2个*;
第三行打n-2个空格,然后打3个*
.................
第n行打0个空格,然后打n+1个*
所以代码为
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d",&n)
for (int i = 0; i < n+1; i++)
{
for (int j = 0; j < n-i; j ++)
{
printf(" ");//空格的规律
}
for (int j = 0; j <= i ;j++)
{
printf("* ");//*的规律
}
printf("\n");
}
return 0;
}
完整代码
接下来我们把上部分反转一下得到下半部分,由于题要求多组输入,所以我们要用
while(scanf("%d",&n) != EOF)
所以总代码为
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n) != EOF)
{
for (int i = 0; i < n+1; i++)
{
for (int j = 0; j < n-i; j ++)
{
printf(" ");
}
for (int j = 0; j <= i ;j++)
{
printf("* ");
}
printf("\n");
}
for (int i = 0; i < n; i++)
{
for(int j = 0; j <= i; j++)
{
printf(" ");
}
for (int j = 0; j < n-i;j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
结语
本次分享就到这里啦,欢迎大家来挑战
最后球球点点关注