题解 | #合并表记录#
合并表记录
https://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201
#include <stdio.h> typedef struct{ long int d; long int v; }key; int main(){ int n,i,j,k,flag=0; long int index,max=0; long int value; long int c=0; scanf("%d",&n); key map[n],temp; for(i=0;i<n;i++){ map[i].d=0; map[i].v=0; } for(i=0;i<n;i++){ scanf("%ld %ld",&map[i].d,&map[i].v); } for(i=0;i<n-1;i++) for(j=i+1;j<n;j++){ if(map[j].d==map[i].d){ map[i].v=map[i].v+map[j].v; for(k=j;k<n;k++) map[k]=map[k+1]; n--; j--; } } for(i=0;i<n-1;i++){ flag=0; for(j=0;j<n-1-i;j++) if(map[j].d>map[j+1].d){ temp=map[j]; map[j]=map[j+1]; map[j+1]=temp; flag=1; } if(flag==0) break; } for(c=0;c<n;c++){ printf("%ld %ld\n",map[c].d,map[c].v); } }
哈希表(溢出)
#include <stdio.h>
int main(){
int n,i;
long int index,max=0;
long int value;
long int c=0;
while(scanf("%d",&n)!=EOF){
long int map[101]={0};
for(i=0;i<n;i++){
scanf("%ld %ld",&index,&value);
map[index]=map[index]+value;
if(max<index)
max=index;
}
for(c=0;c<max;c++){
if(map[c]!=0){
printf("%ld %ld\n",c,map[c]);
}
}
}
}