巴斯卡三角形(杨辉三角)
【摘要】 参考资料: 1. 巴斯卡三角的来历 2. 巴斯卡是十七世纪的一位法国数学家,也是历史上第一位发明了加法计算机的人!他造出“巴斯卡三角形”的方法是这样的:先在纸上写出一行和一列的“ 1 “ ,然后在各个位置中填入数字,每一个位置上的数字都是它上面一个数和左边一个数的和。接下来,把这个表右转45 ° ,放正了,就得到上面的数字三角形了! 3. 现在的数学书里,都...
参考资料:
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"); }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
文章来源: chenhx.blog.csdn.net,作者:谙忆,版权归原作者所有,如需转载,请联系作者。
原文链接:chenhx.blog.csdn.net/article/details/47913403
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)