目录
问题介绍
大致意思如下:
每次的测试用例输入包含两个多项式,分两行给出。
每一行的内容是: 此多项式非零项的个数 非零项1中x的指数 非零项1中x的系数 非零项2...
比如题目中的输入内容:2 1 2.4 0 3.2
2 2 1.5 1 0.5
就分别对应着 2.4*x + 3.2 和 1.5*x^2 + 0.5*x ,题目要我们计算这俩式子的加法,合并同幂的项,最后输出结果式子中非零项的个数 并降这个多项式的指数和系数分成多个组,按照幂从高到低进行输出。
(有点像数据结构做实验时候的内个链表做多项式加法的,不过我这里没用,我的是比较简单的做法)
思路:
我使用了一个A数组,大小是1001(因为题中限制了每个多项式的最高次是1000,最低次是0),我的A数组中,A[i] 的值就是x的i次方的系数。这样,我在输入的过程中就可以直接把指数和系数分别用 i 和 A[i] 来接收了。这样也有利于之后对非零项的统计。
我这种做法不管是两个多项式还是n个多项式相加都能解决问题,不过如果题目给出的指数的最大值过大,我这种开数组的方法就不是很好用了...
代码:
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
int main(){
//A是系数数组(从大到小)
double A[1001];
//先全置为0
for(int i=0;i<=1000;i++)A[i]=0;
//用来统计非0项的个数
int count = 0;
for(int l=0;l<2;l++){
//K: 非零项的个数 N: 指数,M:系数
int K,N;
double M;
cin>>K;
for(int i=0;i<K;i++){
cin>>N>>M;
A[N] += M;
}
}
for(int i=0;i<1001;i++){
if(A[i]!=0)
count++;
}
if(count==0){
cout<<0<<endl;
return 0;
}
cout<<count;
for(int i=1000;i>=0;i--){
if(A[i]!=0){
cout<<" "<<i<<" ";
printf("%.1f",A[i]);
}
}
cout<<endl;
return 0;
}
注意:
他这题也有个小坑(可能是我英语太烂了...)
Please be accurate to 1 decimal place.
他要求最后我们输出的所有系数都要保留一位小数,但我一开始因为看不懂,就忽略了...然后首次提交只有17分,我开始重新读题,觉得可能是这句话的问题,我按照保留一位小数小小的改了下,结果就满分通过了。
英语呜呜你真的我哭死,刷题也能绊我一脚。