2

我必须编写一个代码来生成一个有 12 行的帕斯卡三角形。

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

#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);

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

4

1 回答 1

0

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

在此处输入图像描述

您代码中的这个公式基于这样一个事实,即在相同的 n 索引上(在帕斯卡的三角形情况下,同一行),为了获得下一个元素 (k -> k+1),我们需要将当前值(nk)/(k+1):

在此处输入图像描述

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

于 2015-01-06T10:36:31.043 回答