-1

左詰めのパスカルの三角形を出力しようとしています。プログラムは最初に、プロンプト「N:」を介してユーザーから 1 つの正の整数 N を読み取る必要があります。次に、プログラムはパスカルの三角形の最初の N 行を画面に出力します。ただし、外側の 2 つの for ループに問題があると思います。(N=3)
1
1,1
1,2,1を取得する代わりに


1
1,2
2,4,4を取得しています


#include <stdio.h>
int main(void) {

    int input,i,j,k,p,N,x;
    int f1=1;
    int f2=1;
    int f3 = 1;

    printf("N:");
    scanf("%d",&N);

    for(i=1;i<=N;i++){
        for(j=1;j<=i;j++){
            for(x = 1; x<= N-1; x++){
                f1 = f1 * x;
            }
            for(x = 1; x <= j-1; x++){
                f2 = f2 * x;
            }
            for(x = 1; x <= N-j; x++){
                f3 = f3 * x;
            }
            p= (f1)/(f2*f3);

            if(j==i)
                printf("%d",p);
            else
                printf("%d,",p);
        }
        printf("\n");

    }



    return 0;
}
4

2 に答える 2

1

パスカルの三角形の式: C(n,k) , n C k = n!/(k! * (nk)!)次の
コードを試してください:

#include <stdio.h>
int main(void) {
    int i,j,p,N,x;
    int f1=1;
    int f2=1;
    int f3 = 1;

    printf("N:");
    scanf("%d",&N);

    for(i=0;i<=N;i++){      
        for(j=0;j<=i;j++){
            f1=f2=f3=1;  //after each calculation change value to default otherwise it will take old value.
            for(x = 1; x<= i; x++){ // run upto x<=i
                f1 = f1 * x;
            }
            for(x = 1; x <= j; x++){ //run upto x<=j
                f2 = f2 * x;
            }
            for(x = 1; x <= i-j; x++){ //run upto x<=i-j
                f3 = f3 * x;
            }
            p= (f1)/(f2*f3);

            if(j==i)
                printf("%d",p);
            else
                printf("%d,",p);
        }
        printf("\n");

    }
return 0;
}

1 つの値を計算した後、それをデフォルトに変更していないため、古い値を使用して次の計算を行い、間違った出力を出しています。
したがってf1=f2=f3=1;、各計算の後に使用します。

于 2015-02-04T06:47:16.993 に答える
0

最初の反復だけでなく、各反復でf1f2、およびを 1 に設定する必要があります。f3ループ境界も調整する必要があります。

#include <stdio.h>

int main(void)
{
    int N;

    printf("N: ");
    scanf("%d", &N);

    printf("Pascal triangle for N = %d\n", N);

    for (int i = 0; i <= N; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            int f1 = 1;
            int f2 = 1;
            int f3 = 1;
            for (int x = 1; x<= i; x++)
                f1 *= x;
            for (int x = 1; x <= j; x++)
                f2 *= x;
            for (int x = 1; x <= i-j; x++)
                f3 *= x;
            int p = (f1)/(f2*f3);

            if (j == i)
                printf("%d", p);
            else
                printf("%d,", p);
        }
        printf("\n");
    }

    return 0;
}

出力例:

$ ./pascal
N: 7
Pascal triangle for N = 7
1
1,1
1,2,1
1,3,3,1
1,4,6,4,1
1,5,10,10,5,1
1,6,15,20,15,6,1
1,7,21,35,35,21,7,1
$
于 2015-02-04T06:53:25.943 に答える