我的代码如下。我的困惑发生在第二和第三个循环中。为什么结果返回 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/