• SSLZYC 二项式展开式


    题目大意:
    给出n,请展开(a+b)^n。


    思路:
    这道题看起来很难的样子,但是实际上非常简单。
    我们可以先展开几个次数小的式子:
    (a+b)^1=a+b
    (a+b)^2=a^2+2ab+b^2
    (a+b)^3=a^3+3a^2b+3ab^2+b^3
    (a+b)^4=a^4+4a^3b+6a^2b^2+4ab^3+b^4
    (a+b)^5=a^5+5a^4b+10a^3b^2+10a^2b^3+5ab^4+b^5

    原来,这道题使有规律的!
    对于(a+b)^n这个式子,展开后一定会形成n+1个单项式,每个单项式的系数又分别是杨辉三角第n+1行的数字,a在每个单项式里的次数从n开始递减到0,b在每个单项式里的次数从0开始递增到n。
    那么,我们只需要求出杨辉三角第n行的数字,就可以很轻松的AC这道题啦!


    代码:

    #include <cstdio>
    using namespace std;
    
    long long f[101][101];
    int n,a,b,k;
    
    int main()
    {
        freopen("power.in","r",stdin);
        freopen("power.out","w",stdout);
        scanf("%d",&n);
        f[1][1]=1;
        k=2;
        for (int i=2;i<=n+1;i++)
        {
            for (int j=1;j<=k;j++)
             f[i][j]=f[i-1][j]+f[i-1][j-1];  //求杨辉三角
            k++;
        }
        printf("(a+b)^%d=",n);
        a=n;  //a的次数
        b=0;  //b的次数
        n++;  //(a+b)^n为第n+1行杨辉三角的数字
        for (int i=1;i<=n;i++)
        {
            if (f[n][i]>1) printf("%lld",f[n][i]);  //输出系数
            if (a==1) printf("a");
            if (a>1) printf("a^%d",a);  //输出a和a的次数
            if (b==1) printf("b");
            if (b>1) printf("b^%d",b);  //输出b和b的次数
            if (i!=n) printf("+");
            a--;  //次数递减
            b++;  //次数递加
        }
        return 0;
    }
  • 相关阅读:
    bzoj1295 [SCOI2009]最长距离
    bzoj1853 [Scoi2010]幸运数字
    bzoj1855 [Scoi2010]股票交易
    bzoj1294 [SCOI2009]围豆豆
    bzoj1237 [SCOI2008]配对
    bzoj1084 [SCOI2005]最大子矩阵
    bzoj1068 [SCOI2007]压缩
    bzoj1082 [SCOI2005]栅栏
    soj97 旅行
    soj98 卡牌
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/9313121.html
Copyright © 2020-2023  润新知