我的问题是我对嵌套循环的理解不够好,无法回答这个问题。我应该使用嵌套的 for 循环对我在左对齐上制作的堆栈进行右对齐,但我无法完全弄清楚两个内部条件。
正确答案:
Height = 8
.......#
......##
.....###
....####
...#####
..######
.#######
########
我的回答:
Height = 8
.......#
.......#......#
.......#......#.....#
.......#......#.....#....#
.......#......#.....#....#...#
.......#......#.....#....#...#..#
.......#......#.....#....#...#..#.#
.......#......#.....#....#...#..#.##
我玩过它,认真对待它,什么都没有。我做了(k = 7,k> j,k--(,(k = 0,k <n-1,k++(,k><j+7,我画了表格,我知道高度几乎与空格的值相同,但在每行上都倒置。我也知道哈希值和空格的值应该等于用户输入的高度。>
它应该从用户那里获取一个值,但我在一个单独的文件上处理它,值 n 是简化和处理它的高度,而无需程序的其余部分。
#include <stdio.h>
int main(void) {
int n = 8;
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
for(int k = 7; k > j; k--) {
printf(".");
}
printf("#");
}
printf("n");
}
}
这其实很简单。用每行写一个表格,以及你需要打印多少个空格和'#'
:
n == 8
| output | line | num_spaces | num_signs |
| -------- | ---- | ---------- | --------- |
| .......# | 1 | 7 | 1 |
| ......## | 2 | 6 | 2 |
| .....### | 3 | 5 | 3 |
| ....#### | 4 | 4 | 4 |
| ...##### | 5 | 3 | 5 |
| ..###### | 6 | 2 | 6 |
| .####### | 7 | 1 | 7 |
| ######## | 8 | 0 | 8 |
对于line
,您可以从0
或1
或n
开始,然后倒退。选择最简单的东西。您将看到,在您的示例中,从1
开始是最简单的。
现在,对于每个line
,我们需要确定打印了多少num_spaces
和num_signs
。他们应该取决于line
和n
.
对于num_spaces
来说,它是n - line
,对于num_signs
line
所以代码应该看起来像这样:
// for each line
for (int line = 1; line <= n; ++line)
{
// print n - line spaces
// print line # characters
// print n
}
使用循环,代码将如下所示:
// for each line
for (int line = 1; line <= n; ++line)
{
// print n - line spaces
for (int i = 0; i < n -line; ++i)
std::cout << ' ';
// print line # characters
for (int i = 0; i < line; ++i)
std::cout << '#';
std::cout << 'n';
}
std::cout.flush();
但这实际上不推荐。你可以摆脱那些内部循环。一种好且简单的方法是使用字符串:
// for each line
for (int line = 1; line <= n; ++line)
{
// print n - line spaces
std::cout << std::string(n - line, ' ');
// print line # characters
std::cout << std::string(line, '#');
std::cout << 'n';
}
std::cout.flush();
您甚至可以更进一步:
// for each line
for (int line = 1; line <= n; ++line)
{
// print n - line spaces and line # characters
std::cout << std::string(n - line, ' ') << std::string(line, '#') << 'n';
}
std::cout.flush();