无法理解Pascal的C ++ Triangle中的这一行

时间:2015-01-06 10:14:10

标签: c++ pascals-triangle

我必须编写一个代码,生成一个包含12行的pascal三角形。

我自己写了一切,除了一部分,这是我们用来生成数字的公式。问题是我不明白我们的计数器与生成的数字之间的联系是什么(因为我们正在使用我们的计数器。)。

#include <iostream>
#include <string>

using namespace std;

int main() {
    const int rows=12;
    int padding, value, fxValue;

    for(int rowCounter=0; rowCounter<rows; rowCounter++)
    {
        fxValue=1;
        cout << string((rows-rowCounter)*6, ' ');

        for(int fxCounter=0; fxCounter<=rowCounter; fxCounter++)
        {
            value=fxValue;
            fxValue = fxValue*(rowCounter-fxCounter)/(fxCounter+1);

//          cout << "fxCounter: "<< fxCounter << endl
//               << "rowCounter: " << rowCounter << endl
//               << "fxCounter: " << fxCounter << endl
//               << "fxValue: " << fxValue << endl;

            padding=fxValue/10;

            if(padding==0) cout << value << string(11, ' ');
            else if(10>padding) cout << value << string(10, ' ');
            else if(padding>10) cout << value << string(9, ' ');
        }
        cout << endl;
    }
    return 0;
}

问题在于:

fxValue = fxValue*(rowCounter-fxCounter)/(fxCounter+1);

有人可以解释一下作者是如何提出使用这些变量的想法以及它是如何工作的?

1 个答案:

答案 0 :(得分:1)

这是有效的,因为Pascal的三角形可以用二项式系数表示:

enter image description here

你的代码中的这个公式是基于这样的事实,即在相同的n-index(在pascal的三角形情况下,同一行),为了得到下一个元素(k - > k + 1),我们需要将当前值乘以(nk)/(k + 1):

enter image description here

要证明你是否想要说服自己,这很容易。 因此,您可以通过此操作从上一个值中获取下一个值。