【C语言】巴斯卡三角问题
2015-06-02 21:58
246 查看
巴斯卡(Pascal)三角形基本上就是在计算 rCn ,其中 r 为行(row),n 为列(column)。因为三角形上的每一个数字都会对应一个 rCn,如下:
0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
4C0 4C1 4C2 4C3 4C4
对应的数字如下图所示:
解题思路
巴斯卡三角形中的 rCn 可以使用下面的公式来计算,以避免阶乘运算时的数值溢出:
rC0 = 1
rCn = rCn-1 * (r - n + 1) / n
解决了计算 rCn 的问题,剩下的问题就是如何将这些数字排列成三角形了。
以上部分转载:http://c.biancheng.net/cpp/html/2879.html
0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
4C0 4C1 4C2 4C3 4C4
对应的数字如下图所示:
解题思路
巴斯卡三角形中的 rCn 可以使用下面的公式来计算,以避免阶乘运算时的数值溢出:
rC0 = 1
rCn = rCn-1 * (r - n + 1) / n
解决了计算 rCn 的问题,剩下的问题就是如何将这些数字排列成三角形了。
#include <stdio.h>//此为c程序,后缀为.c #define HEIGHT 12 int combi ( int r , int n ){ int p = 1 ; int i ; for ( i = 1 ; i <= n ; i ++) { p = p * ( r - i + 1 ) / i ; } return p ; } int main () { int r ; int s ; int t ; for ( r = 0 ; r < HEIGHT ; r ++) { int n; char format [ 5 ]; sprintf ( format , "%% %ds" , ( HEIGHT - r ) * 3 ); printf ( format , "" );//format为字符数组,format里面的内容为% 36s, 这正好为printf函数提供了打印""内容的格式。 for ( n = 0 ; n <= r ; n ++) { printf ( "%6d" , combi ( r , n )); } printf ( "\n" ); } getch(); }
以上部分转载:http://c.biancheng.net/cpp/html/2879.html
相关文章推荐
- 详解C++右值引用
- Cpp primer<<学习函数-实参类型转换、指向函数的指针_3
- [c++] random number
- C++ 初识虚函数
- 黑马程序员——C语言基础——结构体相关练习
- c++ 二维数组名为何取值后与原地址相同
- C++怎么用二维数组作为形参传入
- C语言初探 之 printf压栈顺序(printf("%d %d %d %d %d %d\n",a++, ++a, a++, ++a, a++, ++a ))
- C语言学习-01第一个C语言程序
- 使用C++的string实现高精度加法运算
- 使用C++的string实现高精度加法运算
- C++ volatile关键字
- C语言跳表(skiplist)实现
- C++中的dynamic_cast和static_cast转化
- 纪念逝去的岁月——C++实现一个栈(使用类模板)
- JNI--java调用C&C++
- thrift2访问hbase
- ARM7相关编程之c语言相关语法的书写格式总结
- C++继承与派生的访问基本规则
- 【C语言】关于printf函数输出字符格式