用队列解决杨辉三角问题

转自: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

 

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/C_B_W_/article/details/78871903
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞