请输出以下图形:
*
***
*****
*******
*********
分析:
新手刚看这道词可能觉得无从下手,其实,如果把图形改成一个矩形:
*********
*********
*********
*********
*********
那么就很好解决了:输出5行,其中每行都输出9个* 。
for(int i=0;i<5;i++)
{
for(int j=0;j<9;j++)
{
println("*");
}
}
对于三角形,程序仍然是这个结构:需要两层循环。同样是要输出5行,所以外层循环不变;不同的地方在于每一行输出的内容。其实三角形同样是输出一个矩形,只不过有些地方要打空格,有些地方要打*,以下我们用“-”表示空格,则三角形实为:
----*----
---***---
--*****--
-*******-
*********
所以,问题的重点在于:在每一行中,哪些地方要输出空格,哪些地方要输出星号?如果我们行和列都从1开始编号,如图:
仔细观察我们发现,哪一列要打星,哪一列要打空格,主要和该列与第5列(红线所在列)的距离有关:
第 1 行: 只有第5列本身打星,第5列和第5列(自身)的距离是0
第 2 行: 除了第5列以外,增加第4、6列,4和6与5的距离都为1
第 3 行: 增加了3、7两列要打星,3,7两列和5的距离都为2
……
行了,规律就是:在第n行内,凡是和第5列的距离小于n的列,都要打星,其余的列打空格。
下面代码中,row表示当前行,col表示当前列。
答案:
main(int argc, char* argv[])
{
for(int row=1;row<=5;row++)
{
for(int col=1;col<=9;col++)
{
if( col-5 > -row && col-5 < row)
print( "*");
else
print(" ");
}
print(/n);
}
getchar();
return 0;
}
以下是输出结果:
在本例中,为了保持大家日常生活的习惯,我对行,列的编号均从1开始,其实,C,C++程序员更习惯于编程从0开始,即原来的第1行现在称为第0行,第1列称为第0列,则相关代码如下(黑体部分为改动处):
for(int row=0;row<5;row++)
{
for(int col=0;col<9;col++)
{
if( col-4 >= -row && col-4 <= row)
print( "*");
else
print(" ");
}
print(/n);
}
学会从0开始索引的思想方法,这也是大家所要注意的,否则在阅读别人代码时会比较困难。