自身水平低写不出来,没把题读清 ,搞清楚各个变量的取值范围 , 但是自己写的代码可以通过他的例子, 思想就是两个集合的并集 ,就是不太明白为什么编译不过去完全过不了
#include<iostream>
#include<iomanip>
using namespace std;
//
typedef struct P
{
int K;//1,2,3,..,10
int e[10];//1~1000
float a[10];
}P;
int main()
{
P A, B;
P sum;
int i, j, k;
if (cin >> A.K)
{
for (i = 0; i < A.K; i++)
cin >> A.e[i] >> A.a[i];
}
if (cin >> B.K)
{
for ( i = 0; i < B.K; i++)
cin >> B.e[i] >> B.a[i];
}
i = j = k = 0;
while (i < A.K || j < B.K)
{
if (A.e[i] > B.e[j])
{
sum.e[k] = A.e[i];
sum.a[k] = A.a[i];
i++; k++;
}
else if (A.e[i] < B.e[j])
{
sum.e[k] = B.e[j];
sum.a[k] = B.a[k];
j++; k++;
}
else
{
sum.e[k] = A.e[i];
sum.a[k] = A.a[i] + B.a[j];
j++; i++; k++;
}
}
sum.K = k;
cout << endl;
cout << k<<" ";
for (i = 0; i < k; i++)
{
cout << sum.e[i] << " " << setiosflags(ios::fixed) << setprecision(1) << sum.a[i] << " ";
}
while (1);
return 0;
}
然后百度了一下 看了看他们的代码 其中一个 链接:点击打开链接http://blog.youkuaiyun.com/coraline_m/article/details/28595449
为了方便,他们的代码我也贴上 没得到博主许可 我就先注明一下了。
代码如下:
#include<cstring>
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=2000005;
double a[maxn];
int main()
{
int k,i,p;
double x;
while(cin>>k)
{
memset(a,0,sizeof(a));
for(i=0;i<k;i++)
{
cin>>p>>x;
a[p]+=x;
}
cin>>k;
for(i=0;i<k;i++)
{
cin>>p>>x;
a[p]+=x;
}
int sum=0;
for(i=0;i<=maxn-1;i++)
{
if(fabs(a[i])>=0.1)
sum++;
}
cout<<sum;
for(i=maxn-1;i>=0;i--)
{
if(fabs(a[i])>=0.1)
printf(" %d %.1f",i,a[i]);
}
cout<<endl;
}
return 0;
}
/*
2 1 2.4 0 3.2
2 2 1.5 1 0.5
2 1 -2.4 0 -3.2
2 2 -1.5 1 -0.5
2 1 -2.4 0 0.5
2 2 -1.5 1 2.4
*/
仔细琢磨了一下,他的思路就是直接申请一个很大的空间无论有多少多项式都在这个主式上操作,无非就是加加减减的操作,之前没见过,感觉很新颖。但是需要很多内存,把maxn改成1008也是可以的。
第二个跟这个差不多 链接:点击打开链接
http://blog.youkuaiyun.com/sup_heaven/article/details/8451651
#include<stdio.h>
#include<math.h>
int main(){
int i,n,m,Ni,cnt=0,mark[1008];
double ni,sum[1008];
for(i=0;i<1008;i++){
sum[i]=0;
mark[i]=0;
}
scanf("%d",&n);
for(i=0;i<n;i++){
scanf(" %d %lf",&Ni,&ni);
sum[Ni]=sum[Ni]+ni;
if(mark[Ni]==0){
mark[Ni]=1;
cnt++;
}
}
scanf("%d",&m);
for(i=0;i<m;i++){
scanf(" %d %lf",&Ni,&ni);
sum[Ni]=sum[Ni]+ni;
if(mark[Ni]==0){
mark[Ni]=1;
cnt++;
}
}
for(i=1000;i>=0;i--){
if(mark[i]==1&&fabs(sum[i])<0.00001){
cnt--;
mark[i]=0;
}
}
printf("%d",cnt);
for(i=1000;i>=0;i--){
if(mark[i]==1){
cnt--;
if(cnt==0)
printf(" %d %.1lf\n",i,sum[i]);
else
printf(" %d %.1lf",i,sum[i]);
}
}
return 0;
}
相同的思路也是在一根主式上操作 这里就说下第四个for是用来将输入的两个多项式中同指数,但系数和为0的项标记去掉,所以计数会减一。最后感谢大佬的代码指点。