PAT 1002. A+B for Polynomials (25)(C++)

题目描述

在这里插入图片描述
对于此题,题意很简单,就是两个多项式相加进行,完后输出系数和值
我采用map进行多项式相加,但是不知道问题出在哪,思路和大佬完全一样,但是得分只能得到一部分分数(菜菜菜 )最后发现原来是没有考虑系数可能为0的情况。
其中用到反向遍历map

#include<iostream>
#include<map>
#include<cstdio>
using namespace std;
map<int,double>a;
int main(){
    
    
	int num;
	int x;
	double y;
	cin>>num;
		for(int i=0;i<num;i++){
    
    
			cin>>x>>y;
			a[x]+=y;
		}
		cin>>num;
		for(int i=0;i<num;i++){
    
    
			cin>>x>>y;
		a[x]+=y;
	if(a[x]==0)
		a.erase(x);
		}
		cout<<a.size();
		map<int, double>::reverse_iterator iter;
       for(iter = a.rbegin(); iter != a.rend(); iter++){
    
    
       //if(iter->second!=0)
       	printf(" %d %.1f",iter->first, iter->second );
     }
}

大佬采用数组解(思路一毛一样,我的咋就不对呢)

#include<bits/stdc++.h>
using namespace std;
double coefficient[1005]={
    
    0};
int main(){
    
    
    int K;
    scanf("%d",&K);
    while(K--){
    
    
        int a;
        double b;
        scanf("%d%lf",&a,&b);
        coefficient[a]+=b;
    }
    scanf("%d",&K);
    while(K--){
    
    
        int a;
        double b;
        scanf("%d%lf",&a,&b);
        coefficient[a]+=b;
    }
    int size=0;
    for(int i=0;i<1005;++i)
        if(coefficient[i]!=0)
            ++size;
    printf("%d",size);
    for(int i=1005;i>=0;--i)
        if(coefficient[i]!=0)
            printf(" %d %.1f",i,coefficient[i]);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qaqaqa666/article/details/112535967