转自:http://blog.csdn.net/baiyu9821179/article/details/72675690###
相信大家都知道杨辉三角是什么,就不过多介绍了,这篇博客就是介绍一下,用队列来解决杨辉三角问题,编程语言是C++,代码量不多,关键的代码就20行左右,思路也很简单。
我们用一个循环,两个队列来计算杨辉三角,第一个队列存储第i行的杨辉三角,第二个队列就用来存储第i+1行的杨辉三角,第二个队列的值由第一行队列的值推出来。这样就得到了我们想要的数据。
程序要求输入要显示的杨辉三角行数,然后显示对应的杨辉三角层数:如果有别的需求,可以稍微改一下,思路是一样的。
#include <queue>
#include <iostream>
using namespace std;
int main()
{
cout << "输入杨辉三角的阶数" << endl;
int num;
cin >> num;
queue<int> ori;
//杨辉三角第二行是2个1
ori.push(1);
ori.push(1);
//num - 2 表示总行数是num - 2行,少的两行是第一行和第二行
for (int i = 0; i < num - 2; i++)
{
queue<int> next; //next用来存取第i+1层
next.push(1); //杨辉三角每层的第一个数是1
//开始由第i行推第i+1行
while(!ori.empty()) //当第i行为空时停止
{
int front = ori.front();
ori.pop();
//如果第i行的队列为空,说明第i+1行已经推导了除了最后一个元素的所有项,而杨辉三角每行的最后一个元素总是1
if (ori.empty()) next.push(1);
//如果第i行还有值,进行递推(杨辉三角地推就是第i行的第k个元素加上第k+1个元素得到第i+1行的第k+1个元素)
else next.push(front + ori.front());
}
//把第i+1行元素赋值给第i行,进行新的循环
ori = next;
}
cout << "杨辉三角第" << num << "行内容如下" << endl;
//展示第num行元素
while (!ori.empty())
{
cout << ori.front() << " ";
ori.pop();
}
cout << endl;
}
运行结果:
输入杨辉三角的阶数
6
杨辉三角第6行内容如下
1 5 10 10 5 1
输入杨辉三角的阶数
10
杨辉三角第10行内容如下
1 9 36 84 126 126 84 36 9 1