用c++书写上述代码
时间: 2024-09-27 11:16:07 浏览: 33
以下是使用C++编写输出杨辉三角前n行的代码:
```cpp
#include <iostream>
#include <vector>
#include <queue>
void printPascalTriangle(int n) {
std::vector<std::vector<int>> triangle(1, {1}); // 初始化第一行
std::queue<std::pair<int, int>> pq; // 使用优先级队列存放行和系数
pq.push({0, 1});
for (int i = 1; i <= n; ++i) {
// 打印当前行
while (!pq.empty()) {
int row = pq.front().first;
int coef = pq.front().second;
std::cout << " " << row;
std::cout << coef;
// 更新队列并添加下一行的第一个元素
if (row < i - 1) {
pq.push({row + 1, coef + triangle[row + 1].back()});
}
pq.pop();
}
std::cout << '\n'; // 换行
// 添加下一行的其余元素
if (i != 1) {
triangle.push_back({});
triangle[i - 1].push_back(1); // 新行第一个元素总是1
for (size_t j = 1; j < i; ++j) {
triangle[i - 1].push_back(triangle[i - 2][j - 1] + triangle[i - 2][j]);
}
pq.push({i, triangle[i - 1].back()}); // 最后一个元素入队
}
}
}
int main() {
int n = 5; // 可以修改这里输出更多或更少的行
printPascalTriangle(n);
return 0;
}
```
这段代码首先初始化了一个一维向量来模拟杨辉三角的第一行,然后创建一个优先级队列(实际上这里使用的是标准库中的`std::queue`),用于存储行号和系数。通过循环迭代,每次取出队列中的元素,计算并输出当前行的系数,同时更新队列以加入下一行的元素。最后,每次处理完一行后,会添加下一行到`triangle`中,并将其最后一个元素入队。
阅读全文