c++ 用队列实现杨辉三角
时间: 2024-10-15 15:16:41 浏览: 71
在 C++ 中,可以使用队列(queue)数据结构来模拟杨辉三角(Pascal's Triangle),因为队列的特点是先进先出(FIFO),非常适合存储和访问三角形的行。杨辉三角是一个逐行生成的数阵,每一行的第一个和最后一个数字都是 1,其他数字则是由上一行的相邻数字相加得到。
下面是一个简单的 C++ 示例,利用队列实现杨辉三角:
```cpp
#include <iostream>
#include <queue>
void printPascalTriangle(int rows) {
std::queue<std::pair<int, int>> triangle;
triangle.push({0, 1}); // 初始化第一行
for (int i = 1; i <= rows; ++i) {
while (!triangle.empty() && triangle.front().first >= i) {
triangle.pop(); // 移除已超过当前行的元素
}
if (triangle.empty()) { // 添加新行的第一项
triangle.push({i, 1});
} else {
triangle.push({i - 1, triangle.front().second}); // 添加当前行的其它项
triangle.push({i, triangle.front().second + triangle[++triangle.size()].second}); // 计算并添加当前项
}
for (size_t j = 0; j <= i; ++j) {
std::cout << triangle.front().second << ' ';
triangle.pop();
}
std::cout << '\n';
}
}
int main() {
int rows = 5;
printPascalTriangle(rows);
return 0;
}
```
在这个示例中,我们首先创建一个队列 `triangle` 存储当前行的数字对,然后迭代每一行,根据队列中的信息计算新的项,并将它们放入队列。当需要开始新的一行时,我们会检查队列是否为空,如果空则添加起始的 1,否则继续计算和添加后续项。
阅读全文