2

12 行のパスカルの三角形を生成するコードを作成する必要があります。

1 つの部分を除いて、すべて自分で書きました。これは、数値を生成するために使用する式です。そして問題は、カウンターと生成された数値の間の関係が何であるかを理解していないことです (カウンターを使用しているため)。

#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-index (パスカルの三角形の場合、同じ行) で、次の要素 (k -> k+1) を取得するために、 (nk)/(k+1) による現在の値:

ここに画像の説明を入力

それについて自分自身を納得させたい場合、それを証明するのはかなり簡単です。したがって、この操作で前の値から次の値を取得できます。

于 2015-01-06T10:36:31.043 に答える