题目链接在此。
此题是完全的简单模拟,只需要实现求导公式,注意输出格式即可。
我的方法和《算法笔记》中的方法对比:
我的用a[]数组保存输入数据,然后将求导后的结果存入b[]数组,最后在输出的时候加以输出控制。刚开始第一次提交代码时通过两个测试点,一个格式错误,两个答案错误。后来发现样例没过去,其实只要在输出时做一个判断即可(因为出现在样例的这种错误是由于对常数项求导,使之成为了-1项并输出了,故只需进行判断之后,不输出即可);第二次提交时两个格式错误,其他测试点都过了,其实还是在于样例这种类型,继续在输出时进行判断即可。所以说我的方法在输出格式判断上反而是花了更多时间的。
算法笔记中的方法是用数组a[i]表示指数为i的项的系数,则a[0]=0(零次项的系数为0),然后求导的过程中更新数组a[],之后再遍历数组,从指数从高到低输出,加以输出格式控制即可。还需要注意,每次a[i]都要清零,比如这种情况f(x) = x^5+x^3+x,若不清零,则a[3]就仍然存在,故结果会出错。
此处指给出我自己的代码。
#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;}新闻热点
疑难解答