L2-018 多项式A除以B (25 分)
two
L2-018 多项式A除以B (25 分)
这仍然是一道关于A/B的题,只不过A和B都换成了多项式。你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数。
输入格式:
输入分两行,每行给出一个非零多项式,先给出A,再给出B。每行的格式如下:
N e[1] c[1] ... e[N] c[N]
其中N
是该多项式非零项的个数,e[i]
是第i
个非零项的指数,c[i]
是第i
个非零项的系数。各项按照指数递减的顺序给出,保证所有指数是各不相同的非负整数,所有系数是非零整数,所有整数在整型范围内。
输出格式:
分两行先后输出商和余,输出格式与输入格式相同,输出的系数保留小数点后1位。同行数字间以1个空格分隔,行首尾不得有多余空格。注意:零多项式是一个特殊多项式,对应输出为0 0 0.0
。但非零多项式不能输出零系数(包括舍入后为0.0)的项。在样例中,余多项式其实有常数项-1/27
,但因其舍入后为0.0,故不输出。
输入样例:
4 4 1 2 -3 1 -1 0 -1
3 2 3 1 -2 0 1
输出样例:
3 2 0.3 1 0.2 0 -1.0
1 1 -3.1
解题思路
第一步:
1.有系数、指数,所以使用map存储数据类型
map<int,double>a; //余数
map<int,double>b; //除数
map<int,double>c; //商
2.进行多项式的初始化
①a的初始化
int lena; //a的项数
cin>>lena;
for(int i=0;i<lena;i++)
{int e; //指数double c; //系数cin>>e>>c;maxe_a=max(maxe_a,e); //找到a的最高次指数a[e]=a[e]+c;
}
②b的初始化
注意:b还要多求一个最小项次数
int lenb; //b的项数
cin>>lenb;
for(int i=0;i<lenb;i++)
{int e; //指数double c; //系数cin>>e>>c;mine_b=min(mine_b,b); //找到b的最低次指数maxe_b=max(maxe_b,e); //找到a的最高次指数b[e]=b[e]+c;
}
第二步:除法运算
1.运算次数:
(maxe_a-maxe_b)+1,即for(int i=maxe_a;i>=maxe_b;i--)
即进行几次除法的运算
2.商:
当前a的系数为 :当前a的最高次幂系数/b的最高次幂系数
当前a的指数为 :当前a的最高次幂-b的最高次幂
余数项c:没被削成0的项
商的其中一项就是当前a的最高次幂系数除以b的最高次幂系数
同理指数也是如此
为什么加一个当前呐?
----->a每次最高项都会被(b的最高次项*相应商的一项)所消掉,直到a最终变为要求的余数项为止
------>余数项就是a每一项每次别(b的每项*相应项的商)做差后系数没被削成0的项
for(int i=maxe_a;i>=maxe_b;i--) //进行除法运算的次数
{if(b[maxe_b]!=0) //当b的系数不为0时{div=1.0*a[i]/b[maxe_b]; //c的系数sub=i-maxe_b; //c的指数c[sub]=div; //余数maxe_c=max(maxe_c,sub); //余数中最大的指数for(int j=i;j>=mine_b;j--) //对商进行更新{if(j-sub>=0) //指数不为0时a[j]=a[j]-b[j-sub]*c[sub]; //商}}
}
3.四舍五入运算
for(int i=maxe_c;i>=0;i--)
{c[i]=(double)((int)(c[i]*10+(c[i]<0?-0.5:0.5)))/10;if(c[i])cnt++;
}
整个程序的原码
#include<iostream>
using namespace std;
#include<map>
#include<algorithm>
#include<cmath>
int main()
{map<int,double>a;map<int,double>b;map<int,double>c;int lena,lenb;int maxe_a=0,maxe_b=0,maxe_c=0,mine_b=10000;double div;int sub;cin>>lena;for(int i=0;i<lena;i++){int e;double c;cin>>e>>c;maxe_a=max(maxe_a,e);a[e]=a[e]+c;}cin>>lenb;for(int i=0;i<lenb;i++){int e;double c;cin>>e>>c;mine_b=min(mine_b,e);maxe_b=max(maxe_b,e);b[e]=b[e]+c;}for(int i=maxe_a;i>=maxe_b;i--){if(b[maxe_b]!=0){div=1.0*a[i]/b[maxe_b];sub=i-maxe_b;c[sub]=div;maxe_c=max(maxe_c,sub);for(int j=i;j>=mine_b;j--){if(j-sub>=0)a[j]=a[j]-b[j-sub]*c[sub];}}}int cnt=0;for(int i=maxe_c;i>=0;i--){c[i]=(double)((int)(c[i]*10+(c[i]<0?-0.5:0.5)))/10;if(c[i])cnt++;}if(cnt==0)printf("0 0 0.0\n");else{cout<<cnt;for(int i=maxe_c;i>=0;i--){if(c[i])printf(" %d %.1lf",i,c[i]);}printf("\n");}cnt=0;for(int i=maxe_a;i>=0;i--){a[i]=(double)((int)(a[i]*10+(a[i]<0?-0.5:0.5)))/10;if(a[i])cnt++;}if(cnt==0)printf("0 0 0.0\n");else{cout<<cnt;for(int i=maxe_a;i>=0;i--){if(a[i])printf(" %d %.1lf",i,a[i]);}printf("\n");}return 0;
}
总结
1.区分商和余数,c为商,a为余数
2.第一个大循环,每次确定一个商的系数和指数
3.第二个小循环,进行余数a的更新,a[j]=a[j]-b[j-sub]*c[sub]\
4.四舍五入的操作:
a[i]=(double)((int)(a[i]*10+(a[i]<0?-0.5:0.5)))/10;
L2-018 多项式A除以B (25 分)相关推荐
- 【CCCC】L2-018 多项式A除以B (25分),多项式除法
problem L2-018 多项式A除以B (25分) 这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入 ...
- L2-018 多项式A除以B (25分)
这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入分两行,每行给出一个非零多项式,先给出A,再给出B.每行的 ...
- PTA 多项式A除以B (25 分)
7-10 多项式A除以B (25 分) 这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入分两行,每行给出一 ...
- 团体天梯 L2-018 多项式A除以B (25 分)(测试点分析)
L2-018 多项式A除以B (25 分) 这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入分两行,每行给 ...
- 模拟计算(L2-018 多项式A除以B (25 分))
这一题是一道模拟计算题,只要足够细心就可以解决问题. 原题链接 L2-018 多项式A除以B (25 分) 这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R ...
- PTA L2-018 多项式A除以B (多项式除法)
L2-018 多项式A除以B (25 分) 这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入分两行,每行给 ...
- 多项式A除以B(模拟)
L2-018 多项式A除以B (25 分) 题目链接 这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. [输入格式] 输入分 ...
- PAT甲级 -- 1009 Product of Polynomials (25 分)
This time, you are supposed to find A×B where A and B are two polynomials. Input Specification: Each ...
- C++学习之路 | PTA乙级—— 1010 一元多项式求导 (25分)(精简)
1010 一元多项式求导 (25分) 设计函数求一元多项式的导数.(注:x n (n为整数)的一阶导数为nx n−1 .) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值 ...
最新文章
- 数据结构(08)— 线性单链表基本操作
- Oracle RAC 添加删除节点
- linux删除过期文件
- [转载] 变形金刚1
- python窗口程序-Python GUI 编程(Tkinter)
- RMAN异机恢复步骤及故障处理
- r k-means 分类结果_机器学习-Kmeans均值聚类算法(贪心学院)
- C#发送Email邮件方法总结
- CentOS7搭建ftp服务器(vsftpd,亲测成功)
- Docker持续交付部署类型
- (转)TweenMax动画库学习(四)
- php数组循环转为对象,php中循环实现(字符串,对象,或者数组)编码相互转换
- win7录屏_录屏软件Bandicam安装教程
- python蓝屏代码_死机、卡顿、蓝屏,Python部门的老江湖告诉我的一些超级变态代码...
- 广告视频投放展示平台 springboot+vue
- Maximum Likelihood 最大似然估计
- 深入solidity内部 -以太坊EVN插槽存储关系
- 朴实无华!注意力机制神经网络解析
- python如何安装spyder?
- Hbase Schema设计与数据模型操作
热门文章
- [日推荐]『Java学习者』爱学习的程序猿看过来~
- (二) Marlin-2.1.x 源码解析:步进电机S曲线加速
- python爬取+使用网易卡搭作品数量api
- 心电图前波过多_心电图怎么看,心电图讲解,心电图t波改变
- 项目终验PPT怎么做
- 攻防世界 Web baby_web
- 条形码生成软件如何制作渐变色条形码
- 关于双频/多频腔体滤波器的相关paper汇总
- 全场景智能收银机POS主板RK3568方案
- 国外建模大师精心总结:10个对精通建模用帮助的技巧 用过后觉得真的很实用!