20200409 求两个一元多项式的和

求两个一元多项式的和(静态数组)

(终于有一天能认真打打码了 出来混迟早要还的)

输入格式
输入分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键
(不喜欢打代码的小朋友今天有更喜欢打代码了吗)

发布了2 篇原创文章 · 获赞 0 · 访问量 77

猜你喜欢

转载自blog.csdn.net/wasabidragon/article/details/105423162