我正在尝试输出左对齐的Pascal三角形。程序应首先通过提示“ N:”从用户读取一个正整数N。然后,程序将在屏幕上打印Pascal三角形的前N行。但是,我认为外部两个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;
}

最佳答案

帕斯卡的三角形公式:C(n,k),nCk = n!/(k!*(n-k)!)
试试这个代码:

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


在计算完一个值后,您没有将其更改为默认值,因此它会使用旧值进行下一次计算并给出错误的输出。
因此在每次计算后都使用f1=f2=f3=1;

关于c - 使用C中的for循环输出帕斯卡三角形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28314637/

10-11 23:06
查看更多