如何做这个程序,但反过来,模式



所以我想要这样的输出

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;
}

@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);
}

我添加了另一个与您的完全相同的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;
}

现在返回:

1
123
12345
123
1

最新更新