PAT1002

题目描述:

解法一:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 float x[1010];
 4 int main()
 5 {
 6     int k1,k2,n1,n2,count=0;
 7     float a1,a2;
 8     memset(x,0,sizeof(x));
 9     cin>>k1;
10     for(int i=0;i<k1;i++)
11     {
12         cin>>n1>>a1;
13         x[n1]=a1;
14     }
15     cin>>k2;
16     for(int i=0;i<k2;i++)
17     {
18         cin>>n2>>a2;
19         x[n2]+=a2;
20     }
21     for(int i=0;i<1001;i++)
22     {
23         if(x[i]!=0) count++;
24     }
25     cout<<count;
26     for(int i=1000;i>=0;i--)
27     {
28         if(x[i]!=0)
29         {
30             printf(" %d %.1f",i,x[i]);
31         }
32     }
33     return 0;
34 } 

解法二(用数据结构map优化,两个循环合并成一个):

 1 #include<bits/stdc++.h>
 2 #include<map>
 3 using namespace std;
 4 int main()
 5 {
 6     map< int,double,greater<double> > x;
 7     for(int i=0;i<2;i++)
 8     {
 9         int k;
10         cin>>k;
11         for(int j=0;j<k;j++)
12         {
13             int n;
14             double a;
15             cin>>n>>a;
16             x[n]+=a;
17             if(x[n]==0)//删除防止相加得0的系数 
18             {
19                 x.erase(n);
20             }
21         }
22     }
23     cout<<x.size();
24     map<int,double>::iterator ptr;
25     for(ptr=x.begin(); ptr!=x.end(); ptr++)
26     {
27         printf(" %d %.1f",ptr->first,ptr->second);
28     }
29     return 0;
30 } 
原文地址:https://www.cnblogs.com/zhenxinruoshui/p/13021267.html