PAT乙级.1010. 一元多项式求导 (25)

来源:互联网 发布:淘宝怎么提高宝贝权重 编辑:程序博客网 时间:2024/06/05 04:25

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


题目:

设计函数求一元多项式的导数。(注:x^n(n为整数)的一阶导数为n*x^(n-1)。)

输入格式:

以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式:

以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。

输入样例:

3 4 -5 2 6 1 -2 0

输出样例:

12 3 -10 1 6 0


思路:

  1. 开两个数组,一个数组存输入,一个数组存结果
int poly[1005]; //poly[i]存储输入的多项式指数为i的系数int ans[1005];  //ans[i]存储结果的多项式指数为i的系数
  1. 使用while……!=EOF来读入系数和指数
  2. 由1开始遍历,将求导后结果写入结果数组
  3. 由MAX开始遍历,将结果数组按格式输出

代码:

version1.0

/*** @tag     PAT_B_1010* @authors R11happy (xushuai100@126.com)* @date    2016-07-23 17:28:17-17:56* @version 1.0* @Language C++* @Ranking  180/3621*/#include <cstdio>#include <cstring>#include <cmath>int poly[1005]; //poly[i]存储输入的多项式指数为i的系数int ans[1005];  //ans[i]存储结果的多项式指数为i的系数int main(){    int epo, cof;    int cnt = 0;    int Max = 1;    while (scanf("%d%d", &cof, &epo) != EOF)    {        poly[epo] = cof;    }    for (int i = 1; i <= 1000; i++)    {        if (poly[i])        {            if (Max < i)                Max = i;            ans[i - 1] = i*poly[i];        }    }    printf("%d %d", ans[Max - 1], Max - 1);    for (int i = Max - 2; i >= 0; i--)        {            if (ans[i])            {                printf(" %d %d", ans[i], i);            }        }    printf("\n");    return 0;}

version2.0

/*** @tag     PAT_B_1010* @authors R11happy (xushuai100@126.com)* @date    2016-07-23 19:00:17-19:08* @version 2.0* @Language C++* @Ranking  180/3621*/#include <cstdio>#include <cstring>#include <cmath>int main(){    int epo, cof;    bool flag = false;    while(scanf("%d%d", &cof, &epo) != EOF)    {        if(cof*epo)        {            if(flag)                printf(" ");            else                flag = true;            printf("%d %d", cof*epo, epo-1);        }    }    if(!flag)        printf("0 0");}

收获:

  1. while……!=EOF格式读数据如果一次性读完再操作在编译运行的时候可能会死循环,但是放到OJ上测试没问题,可以先编写简单测试代码测试
  2. 输出时要注意考虑特殊情况,比如求导后没有任何非零项,需要输出0 0等等
  3. 能最快想到并且测试通过的方法就是好方法
0 0
原创粉丝点击