题目
C语言
看图好理解代码。
typedef struct
{
int key;
int value;
}KV;
void fun_2024_6_21()
{
int n;
scanf("%d", &n);
KV* kv = (KV*)malloc(n*sizeof(KV)); //KV kv[n];会报错,说数组声明需要常量
for (int _ = 0; _ < n; _++) scanf("%d %d", &kv[_].key,&kv[_].value);
int i, j;
//合并相同的key
for(i=0;i<n;i++)
for (j = i + 1; j < n; j++)
//合并
if (kv[i].key == kv[j].key)
{
kv[i].value += kv[j].value;
//合并后需要去掉一个
for (int k = j; k < n; k++) kv[k]=kv[k+1];
j--;
n--;
}
//根据key排序
KV tmp;
for (i = 0; i < n; i++)
for(j=i+1;j<n;j++)
if (kv[i].key > kv[j].key)
{
tmp = kv[j];
kv[j] = kv[i];
kv[i] = tmp;
}
//打印
for (i = 0; i < n; i++)
printf("%d %d\n",kv[i].key,kv[i].value);
free(kv);
}
int main() {
fun_2024_6_21();
return 0;
}
C++
#include <iostream>
#include <map>
using namespace std;
void fun_2024_6_22(void)
{
int n;
cin >> n;
map<int, int> m;
map<int, int>::iterator it;
int k, v;
for (int _ = 0; _ < n; _++)
{
cin >> k >> v;
it = m.find(k);
if (it != m.end()) m[k] = it->second + v;
else m[k] = v;
}
//map 默认按照key值升序的
for (it = m.begin(); it != m.end(); it++)
cout << it->first << " " << it->second<<endl;
}
int main() {
fun_2024_6_22();
return 0;
}
Python
n=int(input())
res={}
for _ in range(n):
s=list(map(int,input().split()))
if s[0] not in res:
res[s[0]]=s[1]
else:
res[s[0]]+=s[1]
res=sorted(res.items(),key=lambda x:x[0])
# print(res) [(0, 3), (1, 2), (3, 4)]
for e in res:
print(e[0],e[1],sep=" ")
# for k,v in res.items():