如何更好地理解嵌套循环

How to better understand nested loops?

本文关键字:嵌套循环 更好 何更好      更新时间:2023-10-16

我的问题是我对嵌套循环的理解不够好,无法回答这个问题。我应该使用嵌套的 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,您可以从01n开始,然后倒退。选择最简单的东西。您将看到,在您的示例中,从1开始是最简单的。

现在,对于每个line,我们需要确定打印了多少num_spacesnum_signs。他们应该取决于linen.

对于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();