首页 > 解决方案 > C编程中的二项分布系列

问题描述

我可以用下面的代码写出帕斯卡三角形。但我的愿望是打印**

(a+b)^p

** 系列。我的愿望如下。样本输出:

(a+b)^p for unfolding p = 5
1
a^1 + b^1
a^2 + 2*a^1*b^1 + b^2
a^3 + 3*a^2*b^1 + 3*a^1*b^2 + b^3
a^4 + 4*a^3*b^1 + 6*a^2*b^2 + 4*a^1*b^3 + b^4
a^5 + 5*a^4*b^1 + 10*a^3*b^2 + 10*a^2*b^3 + 5*a^1*b^4 + b^5 

/******** 我的代码 *********/

 #include <stdio.h>
 long paskal(int,int);
 int main() 
 {
   int n=0;
   int m=0;
   int k=0;
   int s=0;
   printf("Enter number of rows:\n");
   scanf("%d", &n);
   for(k = 0; n >= k; k++) {
        for(m = 0; k >= m; m++) {
              long f = paskal(k, m);
                if(k==1)
                    printf("%ld",f);
                else
                    printf("a^%ld %ld b^%ld",k,f,k);
        }
        printf("\n");
    }
    return 0;
 }

 long paskal(int n, int i) {
    if(n == i || i == 0)
      return 1;
    else
      return paskal(n-1, i) + paskal(n-1, i-1);

   }

/********输出**********/

  Enter number of rows:                                                                                                   
  5 
  11                                                                                                                      
  a^2 1 b^2a^2 2 b^2a^2 1 b^2                                                                                             
  a^3 1 b^3a^3 3 b^3a^3 3 b^3a^3 1 b^3                                                                                    
  a^4 1 b^4a^4 4 b^4a^4 6 b^4a^4 4 b^4a^4 1 b^4                                                                           
  a^5 1 b^5a^5 5 b^5a^5 10 b^5a^5 10 b^5a^5 5 b^5a^5 1 b^5

我为我的英语感到抱歉。谢谢你

标签: calgorithmmathseriesbinomial-theorem

解决方案


在您想要的输出中,我建议不要打印a1 时的幂。所以a^1可以是a.

那么你可以这样做——如果你仍然想要它在输出中,if删除它很简单^1

// Helper function
void factor(long f, char letter, int power) {
    if (f != 1)
        printf("*");
    if (power != 0) {
        printf("%c", letter);
        if (power != 1)
            printf("^%d", power);
    }
}

int main() {
    int n = 0;
    printf("Enter number of rows:\n");
    scanf("%d", &n);
    if (n > 0)
        printf("1\n");
    for (int k = 1; k < n; k++) {
        for (int m = 0; m <= k; m++) {
            if (m != 0)
                printf(" + ");
            long f = paskal(k, m);
            if (f != 1)
                printf("%ld", f);
            factor(f, 'a', k - m);
            factor(f, 'b', m);
        }
        printf("\n");
    }
    return 0;
}

推荐阅读