2010-10-30 70 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