题解 | #合并表记录#

合并表记录

https://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201

//利用快排的思路很棒,相邻的行如果第一列相同就合并,不同就输出
//如果利用动态开辟空间做这道题也会报空间过大,不过在本地试着跑一下是没问题的
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int cmp(const void* p1,const void* p2)
{
  //习惯用断言,养成良好的编程习惯
    assert(p1,p2);
    return (*(int(*)[2])p1)[0] - (*(int(*)[2])p2)[0]; 
}
int main()
{
    int n = 0;
    scanf("%d",&n);
    int arr[n][2];
    for(int i =0;i<n;i++)
    {
        scanf("%d %d",&arr[i][0],&arr[i][1]);
    }
    qsort(arr,n,sizeof(int(*)[2]),cmp);
    for(int i =0;i<n;i++)
    {
        if(arr[i][0]==arr[i+1][0] && i<n-1)
        {
            arr[i+1][1] += arr[i][1];
        }
        else
		{
            printf("%d %d\n",arr[i][0],arr[i][1]);
        }
    }
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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