7-2 一元多项式的乘法与加法运算 (20 分)
设计函数分别求两个一元多项式的乘积与和。

输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。

输入样例:

4 3 4 -5 2  6 1  -2 0
3 5 20  -7 4  3 1

输出样例:

15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0

1、解决测试样例
我的思路呢是声明一个结构体,即包含系数coe,也包含指数index,用num1和num2两个结构体数组保存原始数据,使用result_1保存乘法数据,result_2保存加法数据
2、结果为零多项式
如果最终result_1或者result_2的长度是0,那么就输出来“0 0 ”就是了
3、合并同类项以后有的x的系数为0
做法是在打印result的时候,如果某个节点的coe为0,那么直接跳过就好了。可能出现一种情况,就是最终的结果result的第一个节点的coe为0,且长度为1,这个时候程序判断了长度不为0,此时的print函数是不会输出任何东西的,但是应该输出“0 0”才对。

void print(Num num[], int len){if(len){    //if the result existfor (int i = 0; i < len; i++){if(num[i].coe == 0){continue;}if(i==0){cout << num[i].coe << " " << num[i].index;}else{cout << " " << num[i].coe << " " << num[i].index;}}}else{  //if the result is not existcout << "0 0";return;}}

所以,在我们print(result)之前呢,一定要保证result第一个节点的coe不是0,如果第一个节点的coe是0,那我们就应该让后面的节点往前移动,舍去原本的第一个节点,长度减少一,如下所示。

void correct(Num Result[], int len, int tag){for (int i = 0; i < len; i++){if (Result[i].coe == 0){if(tag==1){for (int j = 0; j < k1-1; j++){result_1[j].coe = result_1[j+1].coe;result_1[j].index = result_1[j+1].index;}k1--;}else if (tag == 2){for (int j = 0; j < k2-1; j++){result_2[j].coe = result_2[j+1].coe;result_2[j].index = result_2[j+1].index;}k2--;}}else{break;}}
}

4、使用sort的结构体数组排序就好了

bool mycmp(Num a, Num b){return a.index > b.index;}
sort(result_1,result_1+k1, mycmp);
sort(result_2,result_2+k2, mycmp);

最后要说的是,没一道题每个人的想法都是不同的,这里面有很多小的细节读者起初可能觉得不太好想到,没关系,慢慢来,有问题打在评论区上一起讨论讨论。

#include<iostream>
#include<algorithm>using namespace std;
const int maxn = 1005;struct Num{int coe;int index;
}num1[maxn],num2[maxn],result_1[maxn],result_2[maxn];
int k1 = 0, k2 = 0;int find(int index, Num num[], int len);
void print(Num num[], int len);
bool mycmp(Num a, Num b){return a.index > b.index;}
void correct(Num Result[], int len, int tag);int main(){int n1;cin >> n1;k2 = n1;for (int i = 0; i < n1; i++){int a,b;cin >> a >> b;result_2[i].coe = num1[i].coe = a;result_2[i].index = num1[i].index = b;}int n2;cin >> n2;for (int i  = 0; i < n2; i++){cin >> num2[i].coe >> num2[i].index;}//multiplicationfor (int i  = 0; i < n1; i++){for (int j = 0; j < n2; j++){int coe = num1[i].coe * num2[j].coe;int index = num1[i].index+num2[j].index;int t = find(index,result_1,k1);if(t == -1){result_1[k1].coe = coe;result_1[k1].index = index;k1++;}else{result_1[t].coe+=coe;}}}//additonfor (int j  = 0; j < n2; j++){int coe = num2[j].coe;int index = num2[j].index;int t = find(index,result_2,k2);if (t == -1){result_2[k2].coe = coe;result_2[k2].index = index;k2++;}else{result_2[t].coe+=coe;}}sort(result_1,result_1+k1, mycmp);sort(result_2,result_2+k2, mycmp);correct(result_1,k1,1);     //make sure the first coefficient is not zerocorrect(result_2,k2,2);print(result_1,k1);cout << endl;print(result_2,k2);return 0;
}void print(Num num[], int len){if(len){    //if the result existfor (int i = 0; i < len; i++){if(num[i].coe == 0){continue;}if(i==0){cout << num[i].coe << " " << num[i].index;}else{cout << " " << num[i].coe << " " << num[i].index;}}}else{  //if the result is not existcout << "0 0";return;}}int find(int index, Num num[], int len){for (int i = 0; i < len; i++){if(index == num[i].index){return i;}}return -1;
}
void correct(Num Result[], int len, int tag){for (int i = 0; i < len; i++){if (Result[i].coe == 0){if(tag==1){for (int j = 0; j < k1-1; j++){result_1[j].coe = result_1[j+1].coe;result_1[j].index = result_1[j+1].index;}k1--;}else if (tag == 2){for (int j = 0; j < k2-1; j++){result_2[j].coe = result_2[j+1].coe;result_2[j].index = result_2[j+1].index;}k2--;}}else{break;}}
}

(2)一元多项式的乘法与加法运算 (20 分)相关推荐

  1. 7-2 一元多项式的乘法与加法运算 (20 分)

    7-2 一元多项式的乘法与加法运算 (20 分) 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝 ...

  2. 习题3.6 一元多项式的乘法与加法运算 (20 分)(有测试点具体数据)c语言链表版本

    习题3.6 一元多项式的乘法与加法运算 (20 分) 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数 ...

  3. PTA 7-1 一元多项式的乘法与加法运算 (20 分)

    设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...

  4. 7-2 一元多项式的乘法与加法运算 (20 分)(思路加详解+map做法)map真香啊 各个测试点的用例子 来吧宝贝!

    一:题目 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以 ...

  5. 7-2 一元多项式的乘法与加法运算 (20分) 设计函数分别求两个一元多项式的乘积与和。

    输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 输出分2行,分别以指数递降方 ...

  6. 浙江大学 PTA习题3.6 一元多项式的乘法与加法运算 (20分)

    设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...

  7. 7-2 一元多项式的乘法与加法运算 (20分)

    设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...

  8. PTA:编程题:7-1 一元多项式的乘法与加法运算 (20 分)

    大一下半期数据结构 数据结构题目集 一元多项式的乘法与加法运算 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项 ...

  9. 7-2一元多项式的乘法与加法运算

    title: "7-2一元多项式的乘法与加法运算(20" date: 2018-06-14T01:09:46+08:00 tags: [""] categori ...

  10. PTA->一元多项式的乘法与加法运算

    一元多项式的乘法与加法运算 1.问题描述 2.问题分析 2.1定义多项式数据结构结点数据PolyNode 2.2将数据结点连接到多项式后面Attach 2.3读入多项式数据结点ReadPoly 2.4 ...

最新文章

  1. GDLiveStreaming视频推送RTMP
  2. java jar包 和 war包 区别
  3. springmvc学习笔记(10)-springmvc注解开发之商品改动功能
  4. 手机闪存速度排行_一举夺魁2.0!魅族17 Pro荣获盖得排行第一名
  5. String类能被继承吗,为什么?
  6. idea输入法候选区不跟随光标
  7. (严蔚敏版)数组的顺序存储表示和实现代码
  8. weex android app例子,weex中修改android app图标和欢迎页
  9. office2010的安装和卸载
  10. html5实现对试题图片批改效果,类似盖章效果
  11. java rtf读取,java读取rtf
  12. 机器人领域 期刊与会议
  13. 【HDLBits刷题笔记】Exams/ece241 2013 q7
  14. If python is on the left-most side of the chain, that‘s the version you‘ve asked for.
  15. GitHub:git push问题remote:Support for password authentication was removed on August 13,2021.
  16. python类和对象最全详解(持续修订中)
  17. 学校食堂工作流程图流程图模板分享
  18. 2023全新纯净版本知识付费微信小程序源码_附搭建教程_亲测可用
  19. linux 卸载oracle
  20. Python开发中的接口详解和使用方法

热门文章

  1. LeNet,AlexNet,Inceptionv1,2,3,4,vgg,resnet,DenseNet,网络图解对比
  2. pytorch项目源码理解
  3. Android LeakCanary的使用和原理
  4. C++--第8课 - 类中的封装
  5. Cesium 1.51新功能评测
  6. memcached群集
  7. 《Android游戏开发详解》——导读
  8. Lintcode--007(不同的子序列)
  9. Python安装注意事项
  10. OPPO Monitor Platform:从应用请求到后端处理,自研解决服务化架构系统监控难题...