用佇列解決楊輝三角問題
阿新 • • 發佈:2019-01-26
內容
相信大家都知道楊輝三角是什麼,就不過多介紹了,這篇部落格就是介紹一下,用佇列來解決楊輝三角問題,程式語言是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