0

以下の式に基づいて、CでPascal Triangleソリューションを試しています:

パスカル ツリーの式

上記の式に基づいて以下のコードを書きました。

#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 を与えているため、論理エラーを見つけることができません。例: - 行 = 4 & 列 = 2 を指定すると、O/P は 6 になるはずですが、O/P として 4 を取得します。

助けてください!!

4

2 に答える 2

2

この線

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

間違っている。で割り切れる必要はありません(通常はrow - i割り切れません)。i最初に乗算してから除算する必要があります。

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

(括弧はこのように暗黙的に配置されるため必要ありません) row

int g = gcd(row - i, i)

と を割り(row - i) / gvalue[i-1]/(i/g)これらの結果を掛けます。

于 2013-02-15T16:00:08.567 に答える
0

rowiare ints((row-i)/i)は、切り捨てられる整数除算を使用するためです。そのため、 whenrow == 5およびi == 2it は 1.5 ではなく 1 に評価されます。

シリーズの動作方法により、式を多少再構成することで浮動小数点演算の使用を避けることができると思います。

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