PAT-B 1010. 一元多项式求导 (25)

题目链接在此

题意理解

此题是完全的简单模拟,只需要实现求导公式,注意输出格式即可。

我的方法和《算法笔记》中的方法对比:

我的用a[]数组保存输入数据,然后将求导后的结果存入b[]数组,最后在输出的时候加以输出控制。刚开始第一次提交代码时通过两个测试点,一个格式错误,两个答案错误。后来发现样例没过去,其实只要在输出时做一个判断即可(因为出现在样例的这种错误是由于对常数项求导,使之成为了-1项并输出了,故只需进行判断之后,不输出即可);第二次提交时两个格式错误,其他测试点都过了,其实还是在于样例这种类型,继续在输出时进行判断即可。所以说我的方法在输出格式判断上反而是花了更多时间的。

算法笔记中的方法是用数组a[i]表示指数为i的项的系数,则a[0]=0(零次项的系数为0),然后求导的过程中更新数组a[],之后再遍历数组,从指数从高到低输出,加以输出格式控制即可。还需要注意,每次a[i]都要清零,比如这种情况f(x) = x^5+x^3+x,若不清零,则a[3]就仍然存在,故结果会出错。

AC代码

此处指给出我自己的代码。

#include<stdio.h>
#include<string.h>

int main(){

    int a[10000],b[10000];
    int cnt = 0;
    int bindex = 0;

    while(scanf("%d",&a[cnt++]) != EOF);
    cnt--;

    //求导公式 
    for(int i = 0 ; i < cnt; i++){
        if(i%2 == 0){
            b[i] = a[i]*a[i+1];
        } else{
            b[i] = a[i]-1;
        }
        bindex = i;
    }

    //特判零次项 
    if(bindex==1 && b[0] == 0){
        printf("0 0\n");
        return 0;
    }   

    //输出控制 
    for(int i = 0 ; i <= bindex; i++ ){

        if(i%2 == 0 && b[i] == 0) {
            break;
        }

        if(i==0){
            printf("%d",b[i]);
        }else{
            printf(" %d",b[i]);
        }
    }
    printf("\n");

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值