1.题目描述:
设计函数求一元多项式的导数。
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
2.题目分析:
本题本身并没有难度,完全不需要链表直接利用求导法则输出就可以求解问题,但是为了加深自己对于数据结构以及链表的理解,因此本人又用了链表来模拟实现这个过程。详见代码
3.代码实现:
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int num; //系数
int exp; //指数
LNode *Next; //next指针
}LNode,*LinkList;
void Init_List(LinkList &L){ //链表初始化
L=(LNode *)malloc(sizeof(LNode));
L->Next=NULL;
}
LNode *Derivation(int a,int b){ //利用求导法则生成结点
LNode *node=(LNode *)malloc(sizeof(LNode));
node->num=a*b;
node->exp=b-1;
return node;
}
void TailInsert(LinkList &L,LNode *node){ //尾插法
LNode *p=L;
while(p->Next != NULL){ //找到最后一个结点
p=p->Next;
}
node->Next=NULL;
p->Next=node;
}
void PrintList(LinkList L,int f){ //输出链表,f==0为常数多项式输出0 0
if(f){
int flag=0;
L=L->Next;
while(L){
if(! flag){
printf("%d %d",L->num,L->exp);
flag=1;
}
else
printf(" %d %d",L->num,L->exp);
L=L->Next;
}
}
else{
printf("0 0");
}
}
int main(){
LinkList L;
LNode *N;
int a,b,flag=0; //flag为标志位,判断该多项式是否为常数多项式
Init_List(L);
while(scanf("%d %d",&a,&b)!=EOF){
if(b!=0){ //b==0为常数 不参与链表的插入
flag=1;
N=Derivation(a,b);
TailInsert(L,N);
}
}
PrintList(L,flag);
return 0;
}
最后,希望这篇文章能给正在学习数据结构的同学打下更好的基础。