zoukankan      html  css  js  c++  java
  • [洛谷U62358]求导函数

    U62358 求导函数

    题面

    给出一个n次函数(f(x)=a_{n}x^{n}+a_{n-1}x^{n-1}+...+a_{1}x+a_0)的各项系数(a_n,a_{n-1}...a_1,a_0)
    请计算它的导函数。

    格式

    输入包括两行。
    第一行包括一个整数(n)
    第二行n+1个整数(a_n,a_{n-1}...a_1,a_0)

    输出包括一行,即所求的导函数。具体格式见样例

    样例#1

    输入

    2
    2 0 1
    

    输出

    f(x)=4x
    

    样例#2

    输入

    7
    3 8 0 2 1 7 4 4
    

    输出

    f(x)=21x^6+48x^5+8x^3+3x^2+14x+4
    

    数据限制

    规模 n
    50% ([1,20])
    50% ([1,10000])
    规模 (a_i)
    20% (0)
    80% ([-49,50])

    分析

    这个题目中需要解决的问题有两个:

    • 如何求导函数
    • 如何输出
      对于第一个问题,有题意可知f(x)一定是一个整式函数,所以有如下公式成立:

    [f'(x)={n}a_{n}x^{n-1}+(n-1)a_{n-1}x^{n-2}+...+a_1 ]

    而对于第二个问题,则需要注意很多特殊情况。

    1. (a=0),则跳过这一项
    2. 除了第一项,(a>0)时前面要有+号
    3. 除了最后一项,(a=1/-1)分别只能输出+和-
    4. 最后一项的(x^0)不能输出,倒数第二项的(x^1)只能输出(x)

    解法

    #include<bits/stdc++.h>
    using namespace std;
    int n,a;
    int main(){
        cin>>n;
        cout<<"f(x)=";
        for(int i=n;i>=0;i--){
            cin>>a;
            if(i==0)break;                  //只有n项
            if(a==0)continue;               //系数为0不输出
            a*=i;                           //转换为导函数
            if(a<0){                        //负数时
                if(i==1)cout<<a;            //最后一项必须完整输出
                else if(a==-1)cout<<'-';    //-1时只输出-号
                else cout<<a;
            }else{                          //正数时
                if(i!=n)cout<<'+';          //除了第一项都要有+号
                if(a!=1||i==1)cout<<a;      //系数不为一或最后一项时都要完整输出
            }
            if(i==2)cout<<'x';              //倒数第二项
            else if(i!=1)cout<<"x^"<<i-1;   //除了最后一项以外的
        }
    } 
    

    数据

  • 相关阅读:
    「manacher」
    「回文自动机」
    「可持久化数据结构(平衡树、trie树、线段树) 」
    「后缀数组」
    「LCT」
    「网络流」
    「一些知识点」
    「至今不会」
    「推荐博客」
    「最小生成树」
  • 原文地址:https://www.cnblogs.com/water-lift/p/10400532.html
Copyright © 2011-2022 走看看