题目描述
数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
输入描述
先输入键值对的个数
然后输入成对的index和value值,以空格隔开
输出描述
输出合并后的键值对(多行)
示例
输入:
4
0 1
0 2
1 2
3 4
输出:
0 3
1 2
3 4
思路
利用容器 vector,已知键值对的数目n,则首先生成长度为n的全零数组arr,将index位置处的元素值arr[index]设为value,将索引相同的记录进行相加合并arr[index]=arr[index]+value,然后将元素非零索引打印出来。但是这种方法当value=0时会发生错误。
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n;
while(cin>>n){
int index,value;
vector<int> arr(n,0);
for(int i=0;i<n;i++){
cin>>index>>value;
arr[index]=arr[index]+value;
}
for(int i=0;i<n;i++){
if(arr[i]!=0){
cout<<i<<' '<<arr[i]<<endl;
}
}
}
return 0;
}
利用哈希表,每次将索引index和数值value存入哈希表中,若index相同,将数值相加合并。
#include <iostream>
#include <map>
using namespace std;
int main(){
int n;
while(cin>>n){
int index,value;
map<int,int> arr;
for(int i=0;i<n;i++){
cin>>index>>value;
arr[index]=arr[index]+value;
}
for(auto myarr:arr){
cout<<myarr.first<<' '<<myarr.second<<endl;
}
}
return 0;
}