如何用C++打印杨辉三角
2015-09-16 22:02
507 查看
下面是杨辉三角的一部分,我们观察观察它有什么规律:
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,而且除边界外的每个数的值都是其两肩数的和,杨辉三角与二项式定理有密切关系,当(a+b)n
中n的取值分别为0,1,2,3,4.....时,其各项系数分别对应杨辉三角的第1,2,3,4,5.....行,二项式公式为:
由此得出一个非常重要的规律:在杨辉三角中,令上面公式中的n为n-1,令r为k-1,得出的值为杨辉三角中第n行第k个数的值,也就是
Ck-1n-1 = (n-1)!/((k-1)!*(n-k)!)。为了输出美观,我们要在每行的左边打印空格,假设我们要打印杨辉三角的前num行,如果最后一行,
也就是最长的一行前不打印空格,则第n行前的空格个数为num-n个。
有了这些知识后就可以写代码了,完整的代码如下:
注意:以上代码只能打印前13行的杨辉三角,原因在于求阶乘的函数,我们在求阶乘的函数中声明和返回的变量类型为int型,
在32位机器中int型变量表示数的有效范围是-2^32~2^32-1,而13的阶乘超出了int的表示范围。所以如果你需要打印出更多行
杨辉三角,可以声明变量类型为long或者long long。
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,而且除边界外的每个数的值都是其两肩数的和,杨辉三角与二项式定理有密切关系,当(a+b)n
中n的取值分别为0,1,2,3,4.....时,其各项系数分别对应杨辉三角的第1,2,3,4,5.....行,二项式公式为:
由此得出一个非常重要的规律:在杨辉三角中,令上面公式中的n为n-1,令r为k-1,得出的值为杨辉三角中第n行第k个数的值,也就是
Ck-1n-1 = (n-1)!/((k-1)!*(n-k)!)。为了输出美观,我们要在每行的左边打印空格,假设我们要打印杨辉三角的前num行,如果最后一行,
也就是最长的一行前不打印空格,则第n行前的空格个数为num-n个。
有了这些知识后就可以写代码了,完整的代码如下:
#include<iostream> //求阶乘的函数 int factorial(int num) { if (num == 0) return 1; else { int result = 1; for (int i = 1; i <= num; ++i) result *= i; return result; } } //打印杨辉三角的函数 void function(int rowNum) { int value; for (int n = 1; n <= rowNum; ++n) //对于每一行 { for (int i = 0; i <= rowNum - n; ++i) //打印每行前的空格 std::cout << " "; for (int k = 1; k <= n; ++k) //打印每行的每个数 { value = factorial(n - 1) / (factorial(k - 1)*factorial(n - k)); std::cout << value << " "; } std::cout << std::endl; } } int main() { int lineNum; std::cout << "请输入要打印的行数:" << std::endl; std::cin >> lineNum; function(lineNum); system("pause"); return 0; }
注意:以上代码只能打印前13行的杨辉三角,原因在于求阶乘的函数,我们在求阶乘的函数中声明和返回的变量类型为int型,
在32位机器中int型变量表示数的有效范围是-2^32~2^32-1,而13的阶乘超出了int的表示范围。所以如果你需要打印出更多行
杨辉三角,可以声明变量类型为long或者long long。
相关文章推荐
- C++学习笔记1
- c++引用
- C++标准库——顺序容器
- 【LeetCode从零单刷】Reverse Linked List
- C语言运算符
- 关于C语言中宏定义的高级运用
- c语言指针使用小心得
- 华为机试题C++-去除重复字符并排序
- c++头文件
- 面试C++
- c++关于数组,指针的学习总结
- c++设计模式----组合模式(Composite)
- c++ tip
- c++ tip
- 笔试题:C语言中的字符串问题
- Effective C++——条款43(第7章)
- 一个用c++写的去注释的程序
- 变量名的力量(一)
- C语言实现Huffman树并计算带权路径长度
- C++语言里const修饰符和指针前后位置的作用、区别详解