下面的代码片段打印了帕斯卡三角形,我从互联网上得到了这个片段,但我无法获得 bin 的公式。如果有人可以帮助我,我将不胜感激\
#include<stdio.h>
int main()
{
int bin=1,p,q=0,r,x;
clrscr();
printf("Rows you want to input:");
scanf("%d",&r);
printf("\nPascal's Triangle:\n");
while(q<r)
{
printf("ROW %d",q);
for(p=40-3*q;p>0;--p)
printf(" ");
for(x=0;x<=q;++x)
{
if((x==0)||(q==0))
bin=1;
else
bin=(bin*(q-x+1))/x;
printf("%6d",bin);
}
printf("\n");
++q;
}
getchar();
return 0;
}
最佳答案
好的,我们来看看。 实际的公式是内部 for 循环:
for(x=0;x<=q;++x)
{
if((x==0)||(q==0))
bin=1;
else
bin=(bin*(q-x+1))/x;
printf("%6d",bin);
}
q 代表帕斯卡三角形的行,从顶部开始。
x 表示行中的元素编号。由于在第 1 行中将有 1 个元素,在第 2 行中将有两个元素。
所以for(x=0;x<=q;++x)
有道理。
现在到 if 子句 if((x==0)||(q==0))
。如果 x 为 0,则我们位于三角形的左侧或三角形行的开头,该行始终为 1。如果 q 为 0,则显然这是三角形的第一行(从顶部开始),也始终为 1 1. 由于只有一个元素。
现在到 else 子句,这可能是最有趣的部分:
else
bin=(bin*(q-x+1))/x;
我们第一次进入这个子句是在循环开始时 q 为 0 并且 x 为 0 并设置为 1 之后。这很重要,因为 bin 是在 for 循环之外定义的,并且将值保留在迭代到迭代。所以现在 x 是 2,bin 是 1。同样,q 代表行号和行的长度。要了解这一点,您应该查看 pascal's triangle 的维基百科页面。 。特别是带有
的部分Calculating an individual row or diagonal by itself
在那里你会发现再次写下的公式。这里重要的词是阶乘。另请参阅有关 pascal matrix 的文章可能会有帮助。
我会尝试解释它,但是(我讨厌有人这么说)你必须看到它。看一下帕斯卡三角形的对角线和公式的内部 (q-x+1)
。现在计算每条对角线总会得到的值。你看到一个模式了吗?我希望现在事情开始变得有意义。
关于c - 帮助 帕斯卡三角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4058416/