2013-02-15 181 views
0

我試圖用C帕斯卡三角的解決方案,下面公式基於:帕斯卡三角形溶液

#include <stdio.h> 
#include <stdlib.h> 

int pascalTriangle(int row, int col); 

int main() 
{ 
    int row, col; 

    printf("Enter the row [0 to n]: "); 
    scanf("%i", &row); 
    printf("Enter the column [0 to m]: "); 
    scanf("%i", &col); 

    if(col > row) { 
    printf("Error: column can be less than or equal to row\n"); 
    exit(1); 
    } 

    printf("Value = %i\n", pascalTriangle(row, col)); 
    return 0; 
} 

int pascalTriangle(int row, int col) 
{ 
    int value[100]; 
    value[0]=1; 
    int i=1; 
    if(row==0 || row==col || col==0) { 
    return value[0]; 
    } else { 
row=row+1; 
    while(i<=col) { 
     printf("i = %i\trow = %i\tcol = %i\n", i, row, col); 
     value[i]='\0'; 
     value[i]=(value[i-1]) * ((row-i)/i); 
     printf("value[%i] = %i\tvalue[%i] = %i\n", i-1, value[i-1], i, value[i]); 
     ++i; 
    } 
    return value[i-1]; 
    } 
} 

Formula for Pascal tree

我基於上述式寫下面的代碼

在這裏,它在一定程度上是給予適當的O/P。但是,對於很多I/P我發現了錯誤的答案。我無法找到邏輯錯誤,因爲在紙面上邏輯給出了預期的O/P。例如: - 我給行= 4 & col = 2,O/P應該是6,但得到4作爲O/P。

請幫忙!!

+0

此外,您編寫的公式是遞歸的,但您使用迭代來解決問題。你確定你正確地重寫了遞歸嗎? – 2013-02-15 15:53:42

回答

2

value[i]=(value[i-1]) * ((row-i)/i); 

是錯誤的。 row - i不需要被i整除(通常不是)。你需要先乘再劃分,

value[i]=(value[i-1] * (row-i))/i; 

(括號不是必需的,因爲它們被隱因此被置於),但你必須更早溢出,因此對於較大的row值,計算GCD,

int g = gcd(row - i, i) 

併除以(row - i)/g,value[i-1]/(i/g)並將這些結果相乘。

0

因爲rowi是整數((row-i)/i)使用整數除法截斷。所以當row == 5i == 2它評估爲1而不是1.5。

,因爲一系列的工作方式,我認爲你能避免受一定程度上重新配置表達式中使用浮點運算:

value[i]= (value[i-1]) * (row-i))/i;