愚蠢的生活问题背后的学习使我脱轨!我决定改用我的学习资料,现在正在使用Accelerated C ++。
第2章,练习5:
写一组“*”字符,使它们形成正方形,矩形和三角形。
我试过但是却无法完全降低三角形。快速谷歌找到了以下答案:
// draw triangle
int row = 0;
int col = 0;
int height = 5;
// draw rows above base
while (row < height - 1)
{
col = 0;
while (col < height + row)
{
++col;
if (col == height - row)
cout << '*';
else
{
if (col == height + row)
cout << '*';
else
cout << ' ';
}
}
cout << endl;
++row;
}
// draw the base
col = 0;
while (col < height * 2 - 1)
{
cout << '*';
++col;
}
我想要解决这个问题并完全理解它,因为我无法提出自己的答案。无论我经历了多少次,我都看不出它是如何绘制三角形的右侧:
- - - - *
- - - *
- - *
- *
*
* * * * * * * * * *
这就是我在纸上循环的过程。那个右边来自哪里?我有一种直觉,表达式正在做一些我没有看到的事情。代码有效。
答案 0 :(得分:3)
在嵌套的while循环中,在else子句中:
else
{
if (col == height + row)
cout << '*'; // This draws the right side
else
cout << ' ';
}
诀窍是while循环不会退出,直到列到达height + row
,这是右侧的位置。它在前面的if子句中打印左侧(height - row
)。
答案 1 :(得分:1)
我是OP上面显示的运动解决方案的作者。我为这种困惑道歉;我会做一个注释,回过头来为http://www.parkscomputing.com/accelerated-cpp-solutions/
的解决方案添加一些评论