原题题目
代码实现
#include<stdio.h>
int main()
{
int n=0;
while (scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i-1;j++)
{
printf(" ");
}
for(int j=0;j<=i;j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
重点突破
如果把题目想象成在一个正方形中,那么该题要打印的就是屏幕右边的三角形。如何打印?首先观察到,以输入5为例,第一行有四个空格,第二行三个,第三行两个,第四行一个,所以应该是有两个循环在我们的循环体里面。第一个负责打印空格,第二个负责打印* 并且二者是并列关系。
经过多次尝试,发现第一次循环,for i<n,n是输入,当从0开始的i小于n时,开始开始一个大循环,其次要输出空格。什么条件才能以此减少?重点!依次!所以说随着循环次数的增加,打印的越来越少,说明要减去一个一直在增加的量,那么这个量就很有可能是我们的j,j从0开始 j<n-i-1;随着i的增大,n-i-1是一直减小的,符合我们的循环条件。这个循环条件其实可以多试几次,比如n-i不行就试试n-i-1或者n-i+1。
同类题通解
对比这两道题:
BC100直角三角形图案
BC101反转直角三角形图案
不难发现!其实三道题是一个类型的,都是跟循环有关,横向对比:
BC100:
BC101
不难看出,只有循环是不同的,改变循环条件,即可得到不一样的循环。