题解 | #合并表记录#
合并表记录
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;
}
查看9道真题和解析
