题目描述
数据表记录包含表索引和数值(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]);
        }
    }
}