无法理解 Pascal's Triangle for C++ 中的这一行
Can't Understand this line in Pascal's Triangle for C++
我必须编写一个代码来生成 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);
有人可以解释一下作者是如何想到使用这些变量的想法以及它是如何工作的吗?
之所以可行,是因为帕斯卡三角形可以用二项式系数表示:
代码中的这个公式基于这样一个事实,即在相同的 n-index 上(在帕斯卡的三角形情况下,同一行),为了获得下一个元素 (k -> k+1 ), 我们需要将当前值乘以 (n-k)/(k+1):
如果您想说服自己,证明起来相当容易。
所以你可以通过这个操作从前一个值中获取下一个值。
我必须编写一个代码来生成 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);
有人可以解释一下作者是如何想到使用这些变量的想法以及它是如何工作的吗?
之所以可行,是因为帕斯卡三角形可以用二项式系数表示:
代码中的这个公式基于这样一个事实,即在相同的 n-index 上(在帕斯卡的三角形情况下,同一行),为了获得下一个元素 (k -> k+1 ), 我们需要将当前值乘以 (n-k)/(k+1):
如果您想说服自己,证明起来相当容易。 所以你可以通过这个操作从前一个值中获取下一个值。