思路
作为一个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。