UVa 10487 - Closest Sums

  题目大意:给n个整数的集合,再给一个询问数q,从集合中找出最接近q的两个不同的数的和。很直白的问题,直接暴力枚举就可以了。

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #define MAXN 1000+10
 4 #define MAXM 500000
 5 
 6 int a[MAXN], b[MAXM];
 7 
 8 int main()
 9 {
10 #ifdef LOCAL
11     freopen("in", "r", stdin);
12 #endif
13     int n;
14     int kase = 0;
15     while (scanf("%d", &n) != EOF && n)
16     {
17         for (int i = 0; i < n; i++)
18             scanf("%d", &a[i]);
19         int k = 0;
20         for (int i = 0; i < n-1; i++)
21             for (int j = i+1; j < n; j++)
22                 b[k++] = a[i] + a[j];
23         printf("Case %d:\n", ++kase);
24         int m;
25         scanf("%d", &m);
26         while (m--)
27         {
28             int x;
29             scanf("%d", &x);
30             int q = 0, min = abs(x - b[0]);
31             for (int i = 1; i < k; i++)
32                 if (abs(b[i] - x) < min)
33                 {
34                     min = abs(b[i] - x);
35                     q = i;
36                 }
37             printf("Closest sum to %d is %d.\n", x, b[q]);
38         }
39     }
40     return 0;
41 }
View Code

  觉得可以通过排序进行优化,这种专业的东西留到以后做吧,^_^

posted @ 2013-07-22 16:04  xiaobaibuhei  阅读(154)  评论(0)    收藏  举报