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];
  }
}

在这里,在某种程度上,它提供了适当的 O/P。但是,对于许多 I/P,我发现了错误的答案。我找不到逻辑错误,因为在纸面上逻辑给出了预期的 O/P。示例:- 我给 row=4 & col=2,O/P 应该是 6,但得到 4 作为 O/P。

请帮忙!!

4

2 回答 2

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) / gvalue[i-1]/(i/g)并乘以这些结果。

于 2013-02-15T16:00:08.567 回答
0

因为rowi是整数((row-i)/i)使用截断的整数除法。所以当row == 5i == 2它评估为 1 而不是 1.5。

由于该系列的工作方式,我认为您可以通过重新配置表达式来避免使用浮点运算:

value[i]= (value[i-1]) * (row-i)) / i;
于 2013-02-15T15:58:39.870 回答