题目描述:
先输入第一个多项式A,然后输入第二个多项式B。
对每个多项式,先输入“项数”、分别输入各个元素的“指数”、“ 系数”。
例如输入:
6
8 5 4 3 2 1
代表共6项,多项式为8x⁵+4x³+3x²
输出两个多项式相加的结果,按照指数从大到小的顺序。
输入示例:
10
15 8 7 6 4 5 3 2 1 1
8
8 8 7 5 3 4 9 1
输出结果:
23 8 7 6 11 5 3 4 3 2 10 1
思路:将多项式的指数项作为下标,系数项作为数组元素存入相应数组。 其余没有的指数项就赋0。输出时对于非0项从后往前遍历输出。
代码
#include <iostream>
using namespace std;
const int MAX=100;
void output(int a[MAX]);
int main()
{
int a,b;
int A[MAX]={0},B[MAX]={0};
cin>>a; //数组A的项数
int xishu,zhishu; //定义数组的系数和指数项
for(int i=0;i<a;i+=2) //遍历输入系数和指数,同时指数作为下标存入系数
{
cin>>xishu;
cin>>zhishu;
A[zhishu]=xishu;
}
cin>>b; //数组B的项数
for(int i=0;i<b;i+=2)
{
cin>>xishu;
cin>>zhishu;
B[zhishu]=xishu;
}
//特别注意,因为多项式A,B指数项可能不完全相同,有些项不是合并而是添加。因此for循环的条件是i<MAX,而不是i<a或i<b。
for(int i=0;i<MAX;i++)
{
A[i]+=B[i];
}
output(A);
}
void output(int a[MAX]) //输出函数,对于数组中的非零项从大到小输出
{
for(int i=MAX-1;i>0;i--)
{
if(a[i]!=0)
cout<<a[i]<<" "<<i<<" ";
else continue;
}
}
输出结果:
其实也可以直接定义一个数组A,对数组B的操作其实就是在数组A的第一次输入上+=;
因此,main函数也可以简化:(其余部分代码一致)
int main()
{
int a,b;
int A[MAX]={0};
cin>>a; //数组A的项数
int xishu,zhishu; //定义数组的系数和指数项
for(int i=0;i<a;i+=2) //遍历输入系数和指数,同时指数作为下标存入系数
{
cin>>xishu;
cin>>zhishu;
A[zhishu]=xishu;
}
cin>>b;
for(int i=0;i<b;i+=2)
{
cin>>xishu;
cin>>zhishu;
A[zhishu]+=xishu;
}
output(A);
}
所以说这个题其实代码部分并不难,重点是思路要捋顺,当初我就是思路不对,一直想把指数项和系数放在一个数组里做,结果浪费很长时间,最后也没有做出来。看来做这类题还是得想好了再写。
对于这类题大家还有什么简便解法呢?欢迎留言,互相学习!