题目链接:1002 A+B for Polynomials (25 分)
题目大意:给出格式相同的两行,第一行的第一个整数K表示多项式A的非零项的个数,后面的每两个数表示一项,分别是该项的指数和系数;第二行则表示多项式B的相关项的个数。
求A+B,即多项式求和。输出格式同输入格式,第一个K仍是A+B的非零项的个数。
#include <iostream>
using namespace std;
int main() {
float c[1001] = {0};//设立C数组,表示指数i的系数为j
int m, n, t;
float num;
scanf("%d", &m);//输入第一个非零项的个数
for (int i = 0; i < m; i++) {
scanf("%d%f", &t, &num);//输入指数和系数
c[t] += num;
}
scanf("%d", &n);//输入第二个非零项个数
for (int i = 0; i < n; i++) {
scanf("%d%f", &t, &num);//输入指数和系数
c[t] += num;//第一个和第二个相加
}
int cnt = 0;//多项式的个数
for (int i = 0; i < 1001; i++) {
if (c[i] != 0) cnt++;
}
printf("%d", cnt);
for (int i = 1000; i >= 0; i--) {
if (c[i] != 0.0)
printf(" %d %.1f", i, c[i]);
}
return 0;
}
#include <iostream>
using namespace std;
const int maxn=10010;
double a[maxn],b[maxn],c[maxn];//第一个多项式计入到a数组中
int main() {
int k;
cin>>k;
for(int i=0;i<k;i++)//输入第一个多项式
{
int n;
double v;
cin>>n>>v;
a[n]=v;
}
cin>>k;
for(int i=0;i<k;i++)//输入第二个多项式
{
int n;//指数
double v;//系数
cin>>n>>v;
b[n]=v;
}
//求和
for(int i=0;i<maxn;i++)
{
c[i]=a[i]+b[i];
}
k=0;//多项式的项数
for(int i=0;i<maxn;i++)
{
if(c[i])
{
k++;
}
}
cout<<k;
for(int i=maxn-1;i>=0;i--)//输出结果
{
if(c[i])
{
printf(" %d %.1f",i,c[i]);
}
}
return 0;
}