算法竞赛入门经典(第2版)习题2-3详解

时间:2022-02-21 00:16:44

算法竞赛入门经典(第2版)习题2-3详解
画图分析:
算法竞赛入门经典(第2版)习题2-3详解

#include <stdio.h>

int main()
{
int n;
scanf("%d", &n);
int i,j,k;
for(i=1;i<=n;i++)//外层循环控制行数
{
//第一个循环:打印空格
for(j=1;j<i;j++)
{
printf(" ");
}
//第二个循环:打印#
for(k=1;k<=2*(n-i)+1;k++)
{
printf("#");
}
printf("\n");//换行
}
return 0;
}

运行结果:
算法竞赛入门经典(第2版)习题2-3详解
上面写的是打印倒三角形的代码,到这里我觉得还是有必要写一个打印正三角形的代码。
算法竞赛入门经典(第2版)习题2-3详解

#include <stdio.h>

int main()
{
int n;
scanf("%d", &n);
int i,j,k;
for(i=1;i<=n;i++)//外层循环控制行数
{
//打印空格
for(j=n;j>i;j--)
{
printf(" ");
}
//打印#
for(k=1;k<=2*i-1;k++)
{
printf("#");
}
printf("\n");//换行
}
return 0;
}

运行结果:
算法竞赛入门经典(第2版)习题2-3详解
综上所述:其实这两道题的算法思路都是类似的,就是一个外层循环控制打印的层数,然后内层两个循环,第一个控制打印的空格数,第二个控制打印的#数,到这里肯定有人会问,为什么不让第一个循环控制打印的#数量,让第二个循环控制打印的空格数呢?我想告诉你的是因为你仔细观察图形的构造,前面是空格,然后中间是#,最后是空白的,所以最后的空白是可以不用打印的,因为换行后后面自然就是空白的了。所以内层的第一个循环是用来打印空格数的,第二个循环用来打印#的数量,所以只要观察出每行空格数量和#数量随行数的变化的规律,代码自然水到渠成。。