如何更好地理解嵌套循环?
How to better understand nested loops?
我的问题是我对嵌套循环的理解不够好,无法回答这个问题。我应该使用嵌套的 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");
}
}
其实很简单。每行写一个table,需要打印多少个空格和'#'
:
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();
我的问题是我对嵌套循环的理解不够好,无法回答这个问题。我应该使用嵌套的 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");
}
}
其实很简单。每行写一个table,需要打印多少个空格和'#'
:
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();