我的代码如下。我的困惑发生在第二和第三循环期间。为什么结果返回1 ***然后12 **然后123 *然后1234 ..我得到j循环被重置为0但是它没有重新进入k循环,只要它是真的j< = i?
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;
}
答案 0 :(得分:3)
首先: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
只要i <&lt; = 3。
,就会重新进入k循环答案 1 :(得分:1)
为了获得您想要的效果,您的代码应该是这样的:
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循环后执行k循环