该题主要麻烦在,对index排序,同时对应的value值需要同序;累加后,同index需要合并。 解决方案如下: 1、利用struct和qsort进行排序。 2、由于value的值大于1,在判断index相等时,令后出现的index对应的value为零,最终在输出的时候,跳过value为零的情况。
#include <stdio.h>
#include <stdlib.h>
struct test{int index; int value;
}data[500];
int compare(const void* a, const void* b){
return((*(test*) a).index-(*(test*) b).index);
}
int main(){
int number;
int i;
while(scanf("%d",&number)!=EOF){
for(i=0;i<number;i++){
scanf("%d%*c%d\n",&data[i].index,&data[i].value);
}
for (i=0;i<number;i++){
for(int j=i+1;j<number;j++){
if(data[i].index==data[j].index){
data[i].value+=data[j].value;
data[j].value=0;
}
}
}
qsort(data, number, sizeof(data[0]), compare);
for (i=0;i<number;i++){
if(data[i].value!=0){
printf("%d %d\n", data[i].index, data[i].value);
}
;
}
}
return 0;
}