题解 | #合并表记录#

合并表记录

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); //键值有效范围内,打印输出
    }

}
全部评论

相关推荐

11-14 16:15
已编辑
湖南工业大学 Java
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
10-29 21:14
疯犬丨哈士奇:喜欢你的人会主动表白,对你有想法的人会很主动,所以要你的公司不会吊着你所以懂了吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务