帕斯卡三角形||杨辉三角

转载请注明出处:http://blog.csdn.net/u012572172/article/details/41173573


问题陈述:

       杨辉三角如图所示:要求编程输出。


问题解法:

      常规思路每个数字等于其"肩膀"上两数字之和,即a[i][j] = a[i-1][j-1] + a[i-1][j],代码稍有繁琐。

      从代数的角度来考虑这个问题,可以得到一个通式:a[i][j] = a[i][0] * (i/1) * ((i-1)/2)) * ((i-2)/3) * ... * (1/i)。

      公式可能比较抽象,举个例子说明 :(行列下标均从0开始)

             第7行第1列 a[6][0] = 1;

             第7行第2列 a[6][1] = 1 * 6/1;

             第7行第3列 a[6][2] = 1 * 6/1 * 5/2;

             第7行第4列 a[6][3] = 1 * 6/1 * 5/2 * 4/3;

             第7行第5列 a[6][4] = 1 * 6/1 * 5/2 * 4/3 * 3/4;

             第7行第6列 a[6][5] = 1 * 6/1 * 5/2 * 4/3 * 3/4 * 2/5;

             第7行第7列 a[6][6] = 1 * 6/1 * 5/2 * 4/3 * 3/4 * 2/5 * 1/6;


代码详解:

/*
N:杨辉三角行数减一
combine(int n, int c) 计算第n行第c列的值 下标从0开始
*/
#include <stdio.h>
#include <stdlib.h>
#define N 12
long combine(int n, int c);

int main()
{
    int i, j, k;
    for(i=0; i<=N; i++) {
         for(j=0; j<=i; j++) {
            if(j == 0) {
                for(k=0; k<N-i; k++){
                    printf("   ");
                }
            }else {
                printf("   ");
            }
            printf("%3d", combine(i, j));
         }
         printf("\n");
    }
    return 0;
}

long combine(int n, int c) {
    int i;
    long p = 1;
    for(i=1; i<=c; i++) {
        p = p*(n-i+1) / i;
    }
    return p;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值