zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    类的加载
    java经典面试题(转)
    I/O NIO 2
    【转】Impala和Hive的关系
    【转】工作站和服务器的区别
    JAVA之线程
    【转】Linux中vim的粘贴复制快捷键的使用
    【转】Zookeeper集群为什么要是单数
    【转】Impala常见错误
    hadoop命令工作常用
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/9313121.html
Copyright © 2011-2022 走看看