如何用C++打印杨辉三角

     下面是杨辉三角的一部分,我们观察观察它有什么规律:

                             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个。

      有了这些知识后就可以写代码了,完整的代码如下:

 1 #include<iostream>
 2 
 3 //求阶乘的函数
 4 int factorial(int num)
 5 {
 6     if (num == 0)
 7         return 1;
 8     else
 9     {
10         int result = 1;
11         for (int i = 1; i <= num; ++i)
12             result *= i;
13         return result;
14     }
15 }
16 
17 //打印杨辉三角的函数
18 void function(int rowNum)
19 {
20     int value;
21     for (int n = 1; n <= rowNum; ++n) //对于每一行
22     {
23         for (int i = 0; i <= rowNum - n; ++i)  //打印每行前的空格
24             std::cout << " ";
25         for (int k = 1; k <= n; ++k)  //打印每行的每个数
26         {
27             value = factorial(n - 1) / (factorial(k - 1)*factorial(n - k));
28             std::cout << value << " ";
29         }
30         std::cout << std::endl;
31     }
32 }
33 
34 int main()
35 {
36     int lineNum;
37     std::cout << "请输入要打印的行数:" << std::endl;
38     std::cin >> lineNum;
39     function(lineNum);
40     system("pause");
41     return 0;
42 }

     注意:以上代码只能打印前13行的杨辉三角,原因在于求阶乘的函数,我们在求阶乘的函数中声明和返回的变量类型为int型,

在32位机器中int型变量表示数的有效范围是-2^32~2^32-1,而13的阶乘超出了int的表示范围。所以如果你需要打印出更多行

杨辉三角,可以声明变量类型为long或者long long。

 

转载于:https://www.cnblogs.com/yibo141/p/4814742.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值