c++ - 读取三重嵌套 for 循环

标签 c++ for-loop nested

我的代码如下。我的困惑发生在第二和第三个循环中。为什么结果返回 1*** 然后 12** 然后 123* 然后 1234.. 我得到 j 循环被重置为 0 但它不会在 j<=i 为真时重新进入 k 循环吗?

for(int i = 1; i <= 4; i++)
{
    for(int j = 1; j <= i; j++)
        cout << j;
    for(int k = 4 - i; k >= 1; k--)
        cout << "*";

    cout << endl;
}

最佳答案

先澄清一下:

首先:j 永远不会重置为 0,而是重置为 1。

其次:恕我直言,这不是三层嵌套的 for 循环,它是(但不需要让您的代码像您描述的那样工作):

for(...) {
    for(...) {
        for(...) { 
        }
    }
}

令你困惑的是:

漂亮地打印你的代码:

for(int i=1; i<=4; i++) {
    // Write the digits 1..i (1, 12, 123, 1234)
    for(int j=1; j<=i; j++) {
        std::cout << j;
    }

    // Write the stars (***, **, *)
    for(int k=(4-i); k>=1; k--) {
        std::cout << "*";
    }

    std::cout << std::endl;
}

想象以下序列:

// Iteration  | i | j | k | String
// 1          | 1 | 1 | 3 | 1*
// 2          | 1 | 1 | 2 | 1**
// 3          | 1 | 1 | 1 | 1***\n
// 4          | 2 | 1 | - | 1
// 5          | 2 | 2 | - | 12
// 6          | 2 | 2 | 2 | 12*
// 7          | 2 | 2 | 1 | 12**\n
// 8          | 3 | 1 | - | 1
// 9          | 3 | 2 | - | 12
// 10         | 3 | 3 | - | 123
// 11         | 3 | 3 | 1 | 123*\n
// 12         | 4 | 1 | - | 1
// 13         | 4 | 2 | - | 12
// 14         | 4 | 3 | - | 123
// 15         | 4 | 4 | - | 1234\n

重新进入k循环,如果初始索引:

// k:=(4-i) >= 1

因此进入 k-Loop 完全取决于索引 i。

数学上:

//         (4-i) >= 1
// <=>    -i >= (1-3)
// <=>    -i >= -3
// <=>     i <= 3

所以重新进入k循环,只要i <= 3。

关于c++ - 读取三重嵌套 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42662814/

相关文章:

c++ - 将 asio 与 accepter.async_accept 一起使用时出现 boost::bind 错误

c++ - 尝试以相反的顺序使用 extern

c++ - 在多台机器上分布状态

python - 我如何删除这个嵌套的 for 循环,它花费太多时间

json - 使用 jq 将 json 转换为 csv,数组嵌套在数组中

c++ - 将参数传递给模板

使用 for 循环删除中间行

vba - VBA-错误时如何进入下一个迭代循环

r - 如果满足条件,则循环将列粘贴在一起

java - 循环遍历 ConcurrentHashMap 的 ConcurrentHashMap