杨辉三角(一)正置

下面是杨辉三角

                         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
其各项的系数分别对应杨辉三角的第1,2,3,4行,

即是n取一个固定值(作行数),然后变换r的值进行计算,输出

通过查阅资料得到:
二项式展开式公式为:
在这里插入图片描述
在这里插入图片描述

在杨辉三角中,令上面公式中的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;
}

本人参考博客园,博主yibo,写的文章。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值