巴斯卡三角形(杨辉三角)

参考资料:
1.
巴斯卡三角的来历
2.
巴斯卡是十七世纪的一位法国数学家,也是历史上第一位发明了加法计算机的人!他造出“巴斯卡三角形”的方法是这样的:先在纸上写出一行和一列的“ 1 “ ,然后在各个位置中填入数字,每一个位置上的数字都是它上面一个数和左边一个数的和。接下来,把这个表右转45 ° ,放正了,就得到上面的数字三角形了!
3.
现在的数学书里,都把这个三角形称为“巴斯卡三角形” ,事实上,在南宋杨辉所写的数学书里面,早就介绍了由北宋贾宪所创造出来的相同三角形了(所以在中国称为“贾宪三角”或“杨辉三角” ) ,时间可要比巴斯卡早了600年。
组合数计算方法:C(n,m)=n!/[m!(n-m)!]

#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;
}/**上述程序是解决巴斯卡三角形问题的递归方程式。
在主函数中依次combi(0,0)->combi(1,0)->combi(1,1)->combi(2,0)->combi(2,1)->combi(3,1)->其实很简单,
就是这样一个过程,公式是经过推导的,有兴趣也可以自己推导!
这种问题没有为什么,就只有怎么做到!combi(0,0)->combi(1,0)->combi(1,1)->combi(2,0)->combi(2,1)->combi(3,1)->.
把这些代入得出p并且输出!
懂得如何实现就可以了!高深一点,
就要学会自己推导公式,也就是真正算法的精髓。**/
int main()
{
    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");
    }
}
时间: 2024-10-28 22:33:24

巴斯卡三角形(杨辉三角)的相关文章

庞果网之杨辉三角的变形

题目详情          1      1   1  1   1  2   3  2  1 1  3  6   7  6  3  1 以上三角形的数阵,第一行只有一个数1, 以下每行的每个数,是恰好是它上面的数,左上的数和右上数等3个数之和(如果不存在某个数,认为该数就是0). 求第n行第一个偶数出现的位置.如果没有偶数,则输出-1.例如输入3,则输出2,输入4则输出3. 输入n(n <= 1000000000) [解析] 经过分析得出的结论如下: 1.前两行没有偶数可直接返回-1 2.一下每

关于杨辉三角的题目

问题描述 杨辉三角的解答网上一堆答案,可是看到这种填空题我瞬间无语了,求高手解答.usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceExample_05_04{classYangHuiTrangle{privateint[][]trangle;publicintRow{set{//计算三角形数组中值}get{return0;}}///<summary>///获取杨辉三角的

Python极简代码实现杨辉三角示例代码_python

杨辉三角,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列. 把每一行看做一个list,写一个generator,不断输出下一行的list 实现下列输出效果: # [1] # [1, 1] # [1, 2, 1] # [1, 3, 3, 1] # [1, 4, 6, 4, 1] # [1, 5, 10, 10, 5, 1] # [1, 6, 15, 20, 15, 6, 1] # [1, 7, 21, 35, 35, 21, 7, 1] # [1, 8, 28, 56, 70,

C语言在屏幕上输出杨辉三角_C 语言

这就是杨辉三角,也叫贾宪三角.这于我们现在的学习联系最紧密的是2项式乘方展开式的系数规律.如图,在贾宪三角中,第3行的第三个数恰好对应着两数和的平方公式依次下去. 杨辉三角是一个由数字排列成的三角形数表,一般形式如下: ................................................. 杨辉三角的规律是:它的两条斜边都是由数字1组成的,而其余的数则是等于它肩上的两个数之和. 代码如下: #include<stdio.h> #include<stdlib.h

用Python输出一个杨辉三角的例子_python

关于杨辉三角是什么东西,右转维基百科:杨辉三角 稍微看一下直观一点的图: 复制代码 代码如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 11 8 28 56 70 56 28 8 1 杨辉三角有以下几个特点: 每一项的值等于他左上角的数和右上角的数的和,如果左上角或者右上角没有数字,就按0计算.第N层项数总比N-1层多1个 计算第N层的杨辉三角,必须知道N-1层的数字,然后将相邻

用Javascript打印杨辉三角

var arr = new Array(); for(var i = 0 ;i < 6 ; i++){ if(i == 0){arr.push(1);} else if(i == 1){arr = new Array();arr.push(1);arr.push(1);} else{ var arr2 = new Array(); arr2.push(1); for(var j = 0;j<arr.length - 1; j++){arr2.push(arr[j] + arr[j+1]);}

C语言小程序 杨辉三角示例代码

输入要显示的杨辉三角的行数,会打印出金字塔型的杨辉三角,不过行数太多的话,效果不太好,可以再调整一下格式控制   复制代码 代码如下: #include <stdio.h> #include <stdlib.h> int main() {  int i,j,k;  int line;  int *prev, *next;  printf("输入要查看杨辉三角的行数(大于2):");  scanf("%d",&line);  if(li

批处理杨辉三角效果实现代码

 这篇文章主要介绍了批处理打印彩色的杨辉三角效果实现代码,喜欢的朋友可以测试下 效果图:   代码如下: @echo off&color 0e setlocal enabledelayedexpansion mode con: cols=130 lines=130 :top cls ::set /p in=请输入行数: set in=23&set ab=1&set var=64 if "%in%"=="" goto top if %in% g

c语言-杨辉三角等腰三角形求解

问题描述 杨辉三角等腰三角形求解 #include#include#define OK 1#define ERROR -1#define OVERFLOW -2#define MAXQSIZE 100 typedef int Status;typedef struct{ int *base; int front; int rear;}SqQueue; Status InitQueue(SqQueue &Q){ Q.base=(int *)malloc(MAXQSIZE*sizeof(int));