这个程序是怎么做的,但反过来,模式

How do this program but in reverse, pattern

所以我想要这样的输出

  1
 123
12345
 123
  1

我已经制作了程序,但它只输出这些,我不知道如何输出底部三角形

  1
 123
12345

这是我的程序

#include <iostream>
using namespace std;

int main() {
    int n = 3 ;
    int i, j, k;


        for (i = 1; i <= n; i++) {
            for (j = n; j > i; j--) {
                cout << " ";
            }
            for (k = 1; k <= (2 * i - 1); k++) {
                cout << k;
            }
        cout <<endl;
        }

return 0;
}

我添加了另一个 for 循环,与您的循环完全相同,但与 n-1 的顺序不同。我将您的代码修改为:

int main() {
    int n = 3 ;
    int i, j, k;


    for (i = 1; i <= n; i++) {
        for (j = n; j > i; j--) {
            cout << " ";
        }
        for (k = 1; k <= (2 * i - 1); k++) {
            cout << k;
        }
        cout <<endl;
    }

    for (i = n - 1; i >= 1; i--) {
        for (j = n; j > i; j--) {
            cout << " ";
        }
        for (k = 1; k <= (2 * i - 1); k++) {
            cout << k;
        }
        cout <<endl;
    }

    return 0;
}

现在 returns:

  1
 123
12345
 123
  1

@Mojtaba 的回答是对您方法的完美扩展。

但是,我想提供另一种通常用于创建以特定方式格式化的字符串的方法。通常逐行创建整个模式,然后一次性打印到控制台。

我对代码做了适当的注释,供大家参考,应该很容易理解:

#include <iostream>
#include <vector>

void pattern(int n) {
    std::vector<std::string> lines; // store the first n lines to print later
    int length = 2*n - 1; // length of each line

    for(int i = 0; i < n; i++) {
        std::string str = std::string(length, ' '); 
        for(int j = 1; j <= 2*i + 1; j++) {
            str[n - i + j - 2] = j + '0'; 
            // indexing can be figured by observing the pattern
        }
        lines.emplace_back(str);
    }

    for(int i = 0; i < n; i++) {
        std::cout << lines[i] << std::endl;
    }
    
    for(int i = n-2; i >= 0; i--) {
        std::cout << lines[i] << std::endl;
    }

    return;
}

int main() {
    int n;
    std::cin >> n;

    pattern(n);
}