求两个一元多项式的和(静态数组)
(终于有一天能认真打打码了 出来混迟早要还的)
输入格式
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式
输出分1行,分别以指数递降方式输出和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。
sample
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
output
5 20 -4 4 -5 2 9 1 -2 0
多项式的表示 ①数组 编程简单 容易调试 ②链表 动态性强(也可以用动态数组)
多项式相加 ①合并同类项 ②指数降序输出
文件包含
预编译
新类型定义
#include<iostream>
using namespace std;
typedef struct
{
int x;//系数
int y;//指数
}ElemType;
typedef struct {
ElemType data[1000];
int len;
}Link;
初始化函数
input和output
void InitList(Link &a)
{
a.len=0;
}
void input(Link &a)
{
int n,i;
cin>>n;
for(i=0;i<n;i++)
{
cin>>a.data[i].x;
cin>>a.data[i].y;
}
a.len=i;
}
void output(Link a)
{
cout<<a.data[0].x<<" "<<a.data[0].y;
for(int i=1;i<(a.len);i++)
{
if(a.data[i].x==0) break; //!多个0只输出1个
cout<<" "<<a.data[i].x<<" "<<a.data[i].y;
}
}
这里要注意 len和 i j n这些是相等还是+1
比如 len就等于下标+1
还有很重要的 测试点3 “系数和指数取上限,结果有零多项式 ” 就在output这里 if判断一下
多项式相加函数
void addlist(Link a,Link b,Link &c)
{
int i=0,j=0,n=0;
while(i<a.len&&j<b.len)
{
if(a.data[i].y>b.data[j].y)
{
c.data[n].x=a.data[i].x;
c.data[n].y=a.data[i].y;
n++; i++;
}
else if(a.data[i].y<b.data[j].y)
{
c.data[n].x=b.data[i].x;
c.data[n].y=b.data[i].y;
n++; j++;
}
else
{
if(a.data[i].x+b.data[j].x==0)
//如果加起来为零 无需写入表中
{
i++; j++;
}
else
{
c.data[n].x=a.data[i].x+b.data[j].x;
c.data[n].y=a.data[i].y;
n++; i++; j++;
}
}
if(i<a.len)
{
for(i;i<a.len;i++)
{
c.data[n].x=a.data[i].x;
c.data[n].y=a.data[i].y;
n++;
}
}
else
{
for(j;j<b.len;j++)
{
c.data[n].x=b.data[i].x;
c.data[n].y=b.data[i].y;
n++;
}
}
c.len=n;
}
这里要注意如果加起来为零 无需写入表中这种情况
主函数
int main()
{
Link a,b,c,d;
InitList(a);
InitList(b);
InitList(c);
InitList(d);
input(a);
input(b);
addlist(a,b,c);
output(c);
return 0;
}
下面就说我的崩溃过程
首先我纠结了很久究竟要用数组还是链表 百度全都是链表 没看到数组的 但我还不是很熟练链表 偷懒就想用数组
然后第一次死掉 是没看题 漏了未知数a 疯了吧 我一直在想3^4 - 7^4 究竟是怎么= - 4^4…真是傻了
第二次死掉 是过不了合并同类项 于是我在想 是不是要再写个merge来合并呢 我写了老半天 run不了 还是错 后开才发现 给的是降序的 那测试数据应该不会给add了之后还有同类项的数据 我真是吐了 白忙活
第三次死掉 是 len 打出来老有最后的00
第四次死掉 是系数和指数取上限 结果有零多项式
(好了 下次记得要看清题目给的测试点 测试数据)
对了 今天学到的 调试数据还可以cout<<OK看能不能运行到这 还有缩进 tab键和shift+tab键
(不喜欢打代码的小朋友今天有更喜欢打代码了吗)