#include<stdio.h> #include<string.h> #include<stdlib.h> //快速排序,按首位元素升序 int cmp(const void *a, const void *b){ return (*(int*)a - *(int*)b); } //找出在该数组的索引 //注意二维数组传参要写列数 int fun(int (*que)[2], int len, int target){ for(int i = 0; i < len; i++){ if(que[i][0]==target){ return i; } } return -1; } int main(){ int count = 0; scanf("%d\n",&count); //printf("%d\n",count); int que[500][2] = {0}; int j = 0; for(int i = 0; i < count; i++){ int ind = 0; int val = 0; scanf("%d %d\n", &ind, &val); //printf("%d %d\n", ind, val); //查询键是否已存在 int temp = fun(que,j,ind); //不存在则添加到数组末尾 if(temp == -1){ que[j][0] = ind; que[j++][1] = val; } //存在则值相加 else{ que[temp][1] = que[temp][1] + val; } } //快速排序,按首位元素(键)排序 //注意,第二个元素是数组长度,所以是j而不是j-1; qsort(que,j,sizeof(int)*2,cmp); //遍历打印 for(int i = 0; i < j; i++){ printf("%d %d\n",que[i][0],que[i][1]); } return 0; }