【问题描述】输入一个自然数N(1≤N≤9),要求输出如下的魔方阵,即边长为2*N-1,N在中心出现一次,其余位置上的数字从外向中心逐渐增大。 输入3 输出11111 12221 12321 12221 11111 c++
时间: 2024-10-29 12:25:40 浏览: 12
这是一个经典的编程问题,通常称为“魔方矩阵”或“帕斯卡三角形”的变种。在C++中,你可以通过动态规划的方式来解决这个问题。以下是简单的代码实现:
```cpp
#include <iostream>
using namespace std;
void printPascalTriangle(int N) {
int arr[N][N];
// 初始化第一行和第一列
for (int i = 0; i < N; ++i) {
arr[0][i] = 1;
if (i > 0)
arr[i][0] = 1;
}
// 填充数组
for (int i = 1; i < N; ++i) {
for (int j = 1; j < i; ++j) {
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
// 打印结果
for (int i = 0; i < N; ++i) {
for (int j = 0; j <= i; ++j) {
cout << arr[i][j] << " ";
}
cout << endl;
}
}
int main() {
int N;
cin >> N;
printPascalTriangle(N);
return 0;
}
```
在这个代码里,我们首先创建一个二维数组`arr`来存储每一层的数值,然后初始化第一行和第一列。接下来遍历矩阵,计算每个元素为前一行两个相邻元素之和。最后,逐层打印出整个矩阵。
阅读全文