题目描述
数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
输入描述:
先输入键值对的个数 然后输入成对的index和value值,以空格隔开
输出描述:
输出合并后的键值对(多行)
输入例子:
4 0 1 0 2 1 2 3 4
输出例子:
0 3 1 2 3 4
核心思想是用键值数组key[1000]来存储value值,key[index]+=value;语句保证了键值相同的value值相加。这样key[i]!=0就说明i是键值,key[i]是value值。
但是上述思想忽略了index=0&&value!=0的情况,所以bool temp[1000]数组相当于给index立flag,max最大index值,控制循环结束标志,节约时间。
#include<iostream>
using namespace std;
int main()
{
int num,index,value;
int key[1000]={0};
bool temp[1000]={false};
int max=0;
while(cin>>num)
{
for(int i=0;i<num;i++)
{
cin>>index>>value;
key[index]+=value;
temp[index]=true;
if(max<index)
max=index;
}
for(int i=0;i<=max;i++)
if(temp[i])
cout<<i<<" "<<key[i]<<endl;
}
return 0;
}