xdoj-133-一元稀疏多项式计算器(小白精简版

 题目

  • 标题: 一元稀疏多项式计算器
  • 类别: 综合 时间限制 2S 内存限制 1000Kb
  • 问题描述 一元 n 次多项式𝑝0𝑋𝑒0 + 𝑝1𝑋𝑒1 + ⋯ + 𝑝𝑖𝑋𝑒𝑖 + ⋯ + 𝑝𝑛𝑋𝑒𝑛 项数较少时成为一元稀疏多项式,
  • 例如:3 + 6𝑋3 − 2𝑋8 + 12𝑋20是一个一元稀疏多项式。
  • 设计一个一元稀疏多项式计算器程 序完成两个一元稀疏多项式的加减法,输出结果多项式的各项系数和指数。 输入说明 输入数据第 1 行为 3 个正整数 n,m,t。
  • 其中 n 表示第一个多项式的项数,m 表示第二个 多项式的项数,t 表示运算类型,0 为加法,1 为减法。
  • 数据的第 2 行包含 2n 个整数,每两 个整数分别表示第一个多项式每一项的系数和指数;第 3 行包含 2m 个整数,每两个整数分 别表示第二个多项式每一项的系数和指数。
  • 两个多项式的每项是按照指数递增的形式给出的,
  • 例如对于多项式3 + 6𝑋3 − 2𝑋8 + 12𝑋20,对应的输入为 3 0 6 3 -2 8 12 20
  • 输出说明 运算结果按指数从低到高的顺序在以多项式形式(见输出样例)输出结果,注意系数为负数 时输出减号,系数为 0 时不输出该项,指数为 1 时不输出指数。
  • 输入样例 6 2 0 1 0 1 1 1 2 1 3 1 4 1 5 -1 3 -1 4
  • 输出样例 1+x+x^2+x^5

    这个题目比较简单,可以看作是指数和系数的映射,难点在于特殊情况的输出格式需要分类,建议先在草稿上列出全部情况再进行编程,(本来想参考一下别人的代码,但大佬们都写的好长,无奈只能自己想了qwq)注意指数可能为负数,所以在这里用map进行映射而不选用数组,其他都标注在代码里了

#include<bits/stdc++.h>
using namespace std;
map<int,int>arr;//指数可能为负数,用map 
int main(){
	int n,m,t,i=0,a,b,max=0,min=10000000;
	cin>>n>>m>>t;
	while(n--){
		cin>>a>>b;
		if(b>max)max=b;//寻找最大指数项 
		if(b<min)min=b;//寻找最小指数项
		arr[b]=a;
	}
	while(m--){
		cin>>a>>b;
		if(b>max)max=b;
		if(b<min)min=b;
		if(t==0) arr[b]+=a;
		else arr[b]-=a;
	}
	for(i=min;i<=max;i++){
		if(arr[i]!=0){
			if(i==0)cout<<arr[i];//指数为0 
			else if(i==1&&arr[i]!=1&&arr[i]!=-1)cout<<arr[i]<<"x";//指数为1,系数不为1 
			else if(i==1&&arr[i]==1)cout<<"x";
			else if(i==1&&arr[i]==-1)cout<<"-x";//指数为1 
			else if(arr[i]==1)cout<<"x^"<<i;
			else if(arr[i]==-1)cout<<"-x^"<<i;//系数为正负1 
			else cout<<arr[i]<<"x^"<<i;
		}
		if(i==0){
			if(arr[i]==0);
			else if(arr[i+1]>0)cout<<"+";
		}
		else if(arr[i+1]>0)cout<<"+";//输出格式 
	}
	return 0;
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值