用队列解决杨辉三角问题

来源:互联网 发布:win8优化驱动器要几遍 编辑:程序博客网 时间:2024/05/16 00:29

内容

    相信大家都知道杨辉三角是什么,就不过多介绍了,这篇博客就是介绍一下,用队列来解决杨辉三角问题,编程语言是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
原创粉丝点击