嵌套循环:数字模式

时间:2014-11-28 19:44:42

标签: c++ for-loop

在C ++中,我想要一个数字模式:

 1
 2 1
 3 2 1
 4 3 2 1
 5 4 3 2
 6 5 4 3 
 7 6 5 4
 8 7 6 5
 9 8 7 6

对于第1-4行,我这样做了:

 for(size_t i = 0; i < m; i++) {
    for(size_t j = 0 ; j  < i+1;  j++) {
        cout<<j;
    }
    cout<<endl;
 }

要完成第5 - 9行,我是否应该将上述模式与2 for for循环?,是否存在一个想法(一个实际有效)? 因为我的工作无效,请给我一些建议。

3 个答案:

答案 0 :(得分:1)

这就是你想要的

using namespace std;
int
main()
{
    for(int i = 0; i < 10; i ++){
        int count = 0;
        for(int j = i+1; j >0;j-- ){
            if (count >3) break;
            cout << j <<" ";
            count++;
        }
        cout << endl;
    }
}

答案 1 :(得分:1)

这是一个经典的嵌套循环案例,就像你拥有的一样,但有一些小的mod。让我们看一下实际的预期输出:

1
2 1
3 2 1
4 3 2 1
5 4 3 2
6 5 4 3 
7 6 5 4
8 7 6 5
9 8 7 6

每一行的起点是1到9的递增数字,因此外部循环控制:

for (int start = 1; start <= 9; start++) ...

循环中,您从起始编号开始计算,直到满足以下条件之一:

  • 你到达零(第一到第四行);或
  • 比起始编号(第4到第9行)少四个。

您会注意到第四行符合两个那些终止条件,因此与哪一个导致内循环完成无关。另请注意,您不会为终止条件打印任何内容。

因此内部循环看起来像:

for (int num = start; (num > 0) && (num > start - 4); num--) ...

当然,在内循环中,您需要实际打印出数字。将它们结合在一起,您可以通过以下方式实现所需的输出:

#include <iostream>

int main (void) {
    // Lines from 1 to 9 inclusive.

    for (int start = 1; start <= 9; start++) {
        // Output from start to start-3 inclusive,
        //   stopping early if you hit zero.

        for (int num = start; (num > 0) && (num > start - 4); num--) {
            std::cout << num << ' ';
        }

        // Move to next line.

        std::cout << '\n';
    }

    return 0;
}

答案 2 :(得分:1)

我的五美分。:)

#include <iostream>

int main() 
{
    const size_t N = 4;

    for ( size_t i = 1; i <= 9; i++ )
    {
        for ( size_t j = 0; j < N && i - j != 0; j++ ) std::cout << i - j << ' ';
        std::cout << std::endl;
    }

    return 0;
}

输出

1 
2 1 
3 2 1 
4 3 2 1 
5 4 3 2 
6 5 4 3 
7 6 5 4 
8 7 6 5 
9 8 7 6