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

题目链接: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 1000
typedef 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

你可能感兴趣的:(数据结构,C语言,线性表,MOOC,浙大PAT)