稀疏多项式求和问题

给定稀疏多项式P和Q,设计实现多项式求和的算法。要求:

(1)将结果放入多项式P之中,

(2)不允许使用链表,

(3)设计2种不同的算法,并分析两种算法的时间和空间复杂性。

方法1:

 1 #include <stdio.h>
 2 struct poly{            /*构建结构体,含有系数coeff和幂数expo*/
 3     int coeff;
 4     int expo;
 5 };
 6 int readPoly(struct poly p[10]);
 7 int addPoly(struct poly p1[],struct poly p2[],int t1,int t2,struct poly p3[]);
 8 void displayPoly(struct poly p3[],int t3);
 9 struct poly p1[10],p2[10],p3[20];
10
11 int main(int argc, char *argv[])
12 {
13     int     t1,t2,t3;
14     t1 = readPoly(p1);
15         displayPoly(p1,t1);
16     t2 = readPoly(p2);
17         displayPoly(p2,t2);
18     t3 =  addPoly(p1,p2,t1,t2,p3);
19         printf(" \n\n Resultant polynomial after addition: ");
20         displayPoly(p3,t3);
21     return 0;
22 }
23
24 int readPoly(struct poly p[10])
25 {
26     int i=0, t;
27     printf("Please input the total number of terms in the polynomialt_%d:\n",++i);
28     scanf ("%d",&t);                    //输入多项式的项数
29     for   (i=0; i<t; i++)
30     {
31         printf("Please input the Coefficient%d :",i+1);
32         scanf ("%d",&p[i].coeff);        //输入多项式某项的系数coeff
33         printf("Please input the Exponent%d :",    i+1);
34         scanf ("%d",&p[i].expo);        //输入多项式某项的幂数expo
35     }
36     return t;                            //返回该多项式的项数  = 数组长度
37 }
38
39 int addPoly(struct poly p1[],struct poly p2[],int t1,int t2,struct poly p3[])
40 {
41     int i=0, j=0, k=0;
42     while(i<t1 && j<t2)                    //按照幂数expo从低到高,合并两个多项式
43     {
44         if        (p1[i].expo == p2[j].expo)
45         {
46             p3[k].expo    = p1[i].expo;
47             p3[k++].coeff = p1[i++].coeff + p2[j++].coeff;
48         }
49         else if (p1[i].expo <  p2[j].expo)
50         {
51             p3[k].coeff  = p1[i].coeff;
52             p3[k++].expo = p1[i++].expo;
53         }
54         else
55         {
56             p3[k].coeff  = p2[j].coeff;
57             p3[k++].expo = p2[j++].expo;
58
59         }
60     }
61     while(i < t1)                      //合并剩余多项式。此时struct poly p1[]的项数更多
62     {
63         p3[k].coeff  = p1[i].coeff;
64         p3[k++].expo = p1[i++].expo;
65     }
66     while (j < t2)                     //合并剩余多项式。此时struct poly p2[]的项数更多
67     {
68         p3[k].coeff  = p2[j].coeff;
69         p3[k++].expo = p2[j++].expo;
70     }
71     return k;                        //返回合并的多项式项数  = 数组长度
72 }
73
74 void displayPoly(struct poly p3[],int t3)         //输出多项式的表达式
75 {
76     int k;
77     for(k=0; k<t3; k++)
78         printf("%d(x^%d)+",p3[k].coeff,p3[k].expo);
79     printf("\b \n");
80 }

原文地址:https://www.cnblogs.com/ytdyz/p/12356284.html

时间: 2024-10-10 15:31:30

稀疏多项式求和问题的相关文章

C算法与数据结构-线性表的应用,多项式求和---ShinePans

/*---上机作业作业,二项式加法---*/ /*---By 潘尚 ---*/ /*---日期: 2014-5-8 . ---*/ /*---题目:---*/ //假设有两个稀疏多项式A和B,设计算法完成下列任务 //1.输入并建立多项式A和B; //2.求两个多项式的和多项式C; //3.求两个多项式的积多项式D; //输出4个多项式A,B,C,D; #include <stdio.h> #include <stdlib.h> #include <string.h>

hdu 2011 多项式求和

多项式求和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 52871    Accepted Submission(s): 30814 Problem Description 多项式的描述如下: 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ... 现在请你求出该多项式的前n项的和. Input 输入数据由2行组

多项式求和 AC 杭电

多项式求和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 50228    Accepted Submission(s): 29277 Problem Description 多项式的描述如下: 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ... 现在请你求出该多项式的前n项的和. Input 输入数据由2行组

链表实现多项式求和求积

#include <iostream> #include <cstdio> #include<cstdlib> using namespace std; struct Node { double coef; int expn; Node *next; }; void CreatPolynomial(Node *&head, int n) // 生成带表头结点的单链表,除头结点外另生成n个结点 { head = (Node *)malloc(sizeof(Node

多项式求和

多项式求和 Problem : 420 Time Limit : 1000ms Memory Limit : 65536K description 多项式的描述如下: 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ... 现在请你求出该多项式的前n项的和. input 输入数据由2行组成,首先是一个正整数m(m<100),表示测试实例的个数,第二行包含m个正整数,对于每一个整数(不妨设为n,n<1000),求该多项式的前n项的和. output 对于每个测试实例n,要求输

数据结构实践——链表:多项式求和

本文针对数据结构基础系列网络课程(2):线性表的实践项目. [项目 - 多项式求和] 用单链表存储一元多项式,并实现两个多项式的加法. 提示: 1.存储多项式的数据结构 多项式的通式是pn(x)=anxn+an?1xn?1+...+a1x+a0.n次多项式共有n+1项.直观地,可以定义一个数组来存储这n+1个系数.以多项式p(x)=?3.4x10?9.6x8+7.2x2+x为例,存储这个多项式的数组如下图: 可以看出,这种方案适合对某些多项式的处理.但是,在处理一些次数高但项数少的多项式时,存在

poj 2094 多项式求和。

1 /** 2 给出多项式 p(x) = an*x^n + an-1*x^(n-1)..... + a1*x + a0; 3 给定n,l,k,m 计算 x 从 l到 l+k-1 的p(x)的后m 位的平方的和 4 5 用差分序列 ,先计算出前 n项 构造出差分表..后边的k-n个 用递推可得,从下往上递推. 6 **/ 7 8 import java.math.BigInteger; 9 import java.util.Scanner; 10 11 public class Main { 12

一元稀疏多项式加法运算

描述: 设计一个一元稀疏多项式加法运算器,完成多项式a和b相加,建立多项式a+b. 输入说明: 一组输入数据,所有数据均为整数.第1行为2个正整数n,m,其中 n表示第一个多项式的项数,m表示第二个多项式的项数:第2行包含2n个整数,每两个整数分别表示第一个多项式每一项的系数和指数:第3行包含2m个整数,每两个整数分别表示第二个多项式每一项的系数和指数.(注:序列按指数升序排列) 输出说明: 在一行以类多项式形式输出结果,指数按从低到高的顺序.注意,系数值为1的非零次项的输出形式中略去系数1,如

2504(多项式求和)

明明很简单,我却错了N++遍,主要原因是在于自己,给自己测试数据时,忘了测大数据,因为只保留小数点后两位,而200以后的数都是0.69. #include <iostream>#include <stdio.h>#include <string.h>#include <stdlib.h>using namespace std;int main(){ double a[1001]; double t; int n,tt; a[0]=0; a[1]=1; for