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