题目描述
数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
输入描述:
先输入键值对的个数
然后输入成对的index和value值,以空格隔开
输出描述:
输出合并后的键值对(多行)
示例1
输入:
4
0 1
0 2
1 2
3 4
输出:
0 3
1 2
3 4
C语言解法一:
#include "stdio.h"
typedef struct
{
int index;
int val;
}KeyVal;
int main()
{
int n;
while(scanf("%d", &n) != EOF) {
KeyVal tmp[n], t;
int i,j;
for(i=0; i<n; i++)
scanf("%d %d", &tmp[i].index, &tmp[i].val);
for(i=0; i<n; i++) {
for(j=i+1; j<n; j++) {
if(tmp[i].index == tmp[j].index) {
tmp[i].val += tmp[j].val;
for(int k=j; k<n; k++)
tmp[k] = tmp[k+1];
j--;
n--;
}
}
}
for(i=0; i<n; i++) {
for(j=i+1; j<n; j++) {
if(tmp[i].index > tmp[j].index) {
t = tmp[i];
tmp[i] = tmp[j];
tmp[j] = t;
}
}
}
for(i=0; i<n; i++)
printf("%d %d\n", tmp[i].index, tmp[i].val);
}
}
解法二:
#include "stdio.h"
int main()
{
int n;
while(scanf("%d", &n) != EOF) {
int a[1000]={0}, i, index, val;
for(i=0; i<n; i++) {
scanf("%d %d", &index, &val);
a[index] += val;
}
for(i=0; i<1000; i++) {
if(a[i])
printf("%d %d\n", i, a[i]);
}
}
} 
京公网安备 11010502036488号