1. 程式人生 > >用佇列解決楊輝三角問題

用佇列解決楊輝三角問題

內容

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