02-线性结构2. 一元多项式求导 (25)

来源:互联网 发布:最新炒股软件排名 编辑:程序博客网 时间:2024/04/30 12:32

题目链接:http://www.patest.cn/contests/mooc-ds/02-%E7%BA%BF%E6%80%A7%E7%BB%93%E6%9E%842



02-线性结构2. 一元多项式求导 (25)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard

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

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

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

输入样例:
3 4 -5 2 6 1 -2 0
输出样例:

12 3 -10 1 6 0


#include <stdio.h>#include <stdlib.h>#define MAX 1000typedef struct Polynomial{int data[MAX + 1];int highPower;}*Poly;void ZeroPoly(Poly poly) {//将所有系数置0 for(int i = 0; i < MAX; i++)poly->data[i] = 0;poly->highPower = 0;}void InitPoly(Poly poly) {//根据输入格式设计的初始化多项式函数int coef, exp;scanf("%d%d", &coef, &exp);poly->data[exp] = coef;poly->highPower = exp;while(scanf("%d%d", &coef, &exp) != EOF){poly->data[exp] = coef;}}void DerivPoly(Poly poly, Poly retPoly) {//求导 if(poly->highPower)retPoly->highPower = poly->highPower - 1;for(int i = 1; i <= poly->highPower; i++)if(poly->data[i]) {retPoly->data[i - 1] = i * poly->data[i];}}void Print(Poly poly) {if(poly->highPower == 0 && poly->data[0] == 0)printf("0 0");for(int i = poly->highPower; i >= 0; i--) {if(poly->data[i]) {if(i != poly->highPower)printf(" ");printf("%d %d", poly->data[i], i);}}}int main() {Poly poly = (Poly)malloc(sizeof(struct Polynomial));ZeroPoly(poly);InitPoly(poly);//读入数据Poly retPoly = (Poly)malloc(sizeof(struct Polynomial));ZeroPoly(retPoly);DerivPoly(poly, retPoly);//求导Print(retPoly);//输出结果free(poly);free(retPoly);return 0;}

PS:应用数据结构解题,主要为了练习线性表;非数据结构的简单版本参考:http://blog.csdn.net/ice_camel/article/details/42192607

0 0
原创粉丝点击