当前位置:编程学习 > C/C++ >>

HDU 1280 前m大的数

给定的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

补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,