回 帖 发 新 帖 刷新版面

主题:请教一下,巴斯卡三角形问题

#include <stdio.h>  
#define N 12  
  
long combi(int n, int r){  
    int i;  
    long p = 1;  
    for(i = 1; i <= r; i++)  
        p = p * (n-i+1) / i;  
    return p;  
}  
  
  
void paint() {  
    int n, r, t;  
    for(n = 0; n <= N; n++) {  
        for(r = 0; r <= n; r++) {  
            int i;/* 排版设定开始 */  
            if(r == 0) {    
                for(i = 0; i <= (N-n); i++)   
                    printf("   ");  
            }else {  
                printf("   ");  
            } /* 排版设定结束 */  
            printf("%3d", combi(n, r));  
        }  
        printf("\n");  
    }  
}  
  
  
int main()  
{  
  paint();
  return 0;  

}  

中的函数

long combi(int n, int r){  
    int i;  
    long p = 1;  
    for(i = 1; i <= r; i++)  
        p = p * (n-i+1) / i;  
    return p;  
}  是怎么演算出来的,请教一下新手

回复列表 (共1个回复)

沙发

long combi2(int n, int r){ if(n<2 || r==0 || r==n) return 1; return combi2(n-1, r-1)+combi2(n-1, r); /* 第n行 第r列(n>=0, 0<=r<=n) 若n<2,则f[n,r] = 1 若r=0或r=n,则f[n,r] = 1 其它的r,则f[n,r] = f[n-1, r-1] + f[n-1, r] 由部分实例明显看出可能满足组合的各项解,假设 r=0, 则f[n,0]=1 r=1, 则f[n,1]=f[n,0]*n/1=n r=2, 则f[n,2]=f[n,1]*(n-1)/2=n*(n-1)/(1*2) r=3, 则f[n,3]=f[n,2]*(n-2)/3=n*(n-1)*(n-2)/(1*2*3) ..., ... r=n, 则f[n,n]=f[n,n-1]*(n-n+1)/n=n*(n-1)*...*1/(1*2*3*...*n)=1 推出组合公式: r=0,f[n,r]=1 r>0,f[n,r]=n*(n-1)*...*(n-r+1)/(1*2*...*r) 证明: f[n-1,r-1] = (n-1)*...*(n-r+1)*r/(1*2*...*(r-1)*r f[n-1, r] = (n-1)*...*(n-r+1)*(n-r)/(1*2*...*r) f[n-1,r-1] + f[n-1, r] = n*(n-1)*...*(n-r+1)/(1*2*...*r) = f[n,r] */ }

我来回复

您尚未登录,请登录后再回复。点此登录或注册