給定的N個整數序列, 兩兩求和,從大到小輸出M個和數。
因為所有整數不超過5000,則相加不會超過10000,可以
用哈希解決。 1 // 簡單哈希
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <algorithm>
6 using namespace std;
7
8 const int maxn = 3005;
9 int arr[maxn], sum[10001] ,n, m, x, y;
10 //因為所有的整數都不超過5000, 所以最大的和也不超過10000, sum數組開10001即可!
11
12 int main()
13 {
14 while (scanf("%d %d", &n, &m) != EOF)
15 {
16 arr[n];
17 for (int i=0; i<n; i++)
18 {
19 scanf("%d", &arr[i]);
20 }
21 memset(sum, 0, sizeof(sum));
22 for (int i=0; i<n-1; i++)
23 {
24 for (int j=i+1; j<n; j++)
25 {
26 sum[arr[i] + arr[j]] ++;
27 }
28 }
29 int count = 0;
30 for (int j=10000; j>=0; j--)
31 {
32 if (sum[j])
33 {
34 for (int i=0; i<sum[j]; i++)
35 {
36 count++;
37 count == 1 ? printf("%d", j) : printf("%d", j);
38 if (count == m)break;
39 printf(" ");
40 }
41 }
42 if (count == m) break;
43 }
44 printf("\n");
45 }
46 }
47