杨辉三角

巴斯卡三角,又叫杨辉三角,又名贾宪三角。
说来,这也算是大一新生算法入门的东西了,同样的还有什么打印菱形等,不过都差不多。

兼有性质:

  1. 左右对称,中间最大
  2. 开头为1
  3. 每一个数等于其上方两数之和(除前两行)
  4. 第n行有n项,和为(2n-1)

记得上高中时就开始研究杨辉三角,当时有一个公式:
菜鸟前路---算法不就那点事(系列)
这个大家应该很熟知吧。
好,我们再来看一张杨辉三角图
菜鸟前路---算法不就那点事(系列)
这就是文章后面代码的运行结果图,简化一下,就是下面的图:
菜鸟前路---算法不就那点事(系列)
是不是很明了呢?
那么,我们再回到公式,将其展开,如下:
菜鸟前路---算法不就那点事(系列)
是不是会发现一个规律?
没错,就是这几行代码的来源:
菜鸟前路---算法不就那点事(系列)
方法就是for循环的迭代,一共有n行i列。

下面,上代码:

#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;
}
int main(void) {
    int n, r;                     //n用来保存行,r用来保存列
    for(n = 0; n <= N; n++) {     //循环输出共N+1行,从第0行,第1行,...,到第N行
        for(r = 0; r <= n; r++) {    //循环输出每列
            int i;
            if(r == 0) {                 //第0列输出一大溜空格,空格数目等于N-n
                for(i = 0; i <= (N-n); i++)
                    printf("   ");
            }else {                 //0列之后,每列前面的空格个数都相等
                printf("   ");
            } 
            printf("%3d", combi(n, r));//输出空格结束之后输出对应列的值
        }
        printf("\n");//每行输出完毕后进行换行
    }

    return 0;
}

本文灵感来源于前辈博客:http://www.cnblogs.com/xxNote/articles/3965362.html
如有错误,请指正!

相关文章:

  • 2021-12-13
  • 2021-06-05
  • 2021-11-11
  • 2022-01-21
  • 2021-09-18
  • 2021-12-19
  • 2021-11-11
猜你喜欢
  • 2021-11-21
  • 2021-05-24
  • 2021-12-19
  • 2021-08-22
  • 2021-08-08
  • 2021-12-12
相关资源
相似解决方案