题解 | #合并表记录#
合并表记录
http://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct test
{
int index;//键
int value;//值
}data[500];//最多500个键值对
int cmpfunc(const void* a, const void* b) //根据index进行升序排列
{
return ((*(struct test*)a).index - (*(struct test*)b).index);
}
int main()
{
int num;
scanf("%d", &num);
for (int i = 0; i < num; i++)
{
scanf("%d%d", &data[i].index, &data[i].value);
}
for (int i = 0; i < num; i++)
{
for (int j = i+1; j < num; j++) //往后依次查找index相等的值
{
if (data[i].index == data[j].index)
{
data[i].value += data[j].value;
data[j].value = 0; //value的有效范围为:1~100000,所以可以将后面重复的置为无效值0
}
}
}
qsort(data, num, sizeof(data[0]), cmpfunc); //依据index进行升序排列
for (int i = 0; i < num; i++)
{
if (data[i].value == 0) continue; //如果键值为0,无效,继续循环
printf("%d %d\n", data[i].index, data[i].value); //键值有效范围内,打印输出
}
}
