思路
作为一个Java程序员,我拿到这道题以后的第一感觉就是用Map来保存,然后去计算排序输出。
Java有些内置的集合就可以完成这一点,比如TreeMap,这是一个有序的Map。因此可以用Java代码简单的写出这道题的解法。
Java版本
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int a = scanner.nextInt();
Map<Integer, Integer> map = new TreeMap<>();
for (int i = 0; i < a; i++) {
int key = scanner.nextInt();
int value = scanner.nextInt();
if (!map.containsKey(key)) {
map.put(key, value);
} else {
map.put(key, value + map.get(key));
}
}
map.forEach((k, v) -> System.out.println(k + " " + v));
}
}
} 然而最近在学C语言和C++语言,因此就不免要用C语言来写写这段代码。
C本身是没有Map这种容器的,因此可以自己实现一个字典表来处理。不过我想起来之前做的一道题,和这个有点类似,就是用数组去保存输入的数据。数组的下标其实就是一种key,输入的过程中,相同key的value值进行累加就可以了。
因此就有了这一段C语言代码。
C语言版本
#include <stdio.h>
#define SIZE 1000
int main(void)
{
int n;
scanf("%d", &n);
int arr[SIZE]={0};
int key, value;
for (int i = 0; i < n; i++)
{
scanf("%d %d", &key, &value);
arr[key] += value;
}
for (int j = 0; j < n; j++)
{
if (arr[j] == 0)
{
continue;
}
printf("%d %d\n", j, arr[j]);
}
return 0;
} C语言的好处就是真的快,这段代码只用了3ms。

京公网安备 11010502036488号