2010-10-30 84 views
0

下面的代码片段打印杨辉三角形,我已经从网上得到这个片段,但我无法得到bin.If任何公式可以帮助我吧,我会心存感激\帮助帕斯卡三角

#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; 
} 
+0

我真的不知道这个问题,你到底在找什么? – 2010-10-30 11:19:12

+0

@ inf.ig.sh:我无法理解计算bin的公式 – 2010-10-30 13:44:59

回答

1

好吧,让我们一起来看看。 的实际工作式是内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表示行中的元素编号。由于在第一行中,第二行将有两个元素中的一个元素。 因此for(x=0;x<=q;++x)是有道理的。

现在到if子句if((x==0)||(q==0))。如果x是0,那么我们在三角形的左边或三角形行的开始处,这总是1.如果q是0,那么这是三角形的第一行(从顶部开始),它也总是1.因为只有一个元素。

现在

到else子句,这可能是最有趣的部分:

else 
     bin=(bin*(q-x+1))/x; 

我们第一次获得了这一条款是Q后是0和x在循环的开始是0和被设置为1.这是很重要的,因为bin是在for循环之外定义的,并且保持迭代到迭代的值。所以现在x是2并且bin是1.再次q表示行号和行的长度。要了解这一点,你应该看看pascal's triangle的维基百科页面。特别是部分具有

自行计算各列或对角线

在那里你会发现再次写下来的配方。这里的重要词汇是因子。也看看关于pascal matrix的文章可能会有所帮助。 我会尽力解释它,但(我讨厌有人说这样),你必须看到它。看看帕斯卡三角形的对角线和公式(q-x+1)的内部部分。现在计算你将要获得的每个对角线的值。你看到一种模式?我希望现在事情开始有意义。

1

打印所使用的循环来计算斌值来了解它是如何工作

/* ... */ 
    else 
    { 
     printf("new bin=(%d*(%d-%d*1))/%d\n", bin, q, x, x); 
     bin=(bin*(q-x*1))/x; 
    } 
+0

@pmgI仍然没有获得这个公式背后的逻辑来打印三角形.. – 2010-10-30 14:06:15