题目大意:给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: ", ++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. ", x, b[q]); 38 } 39 } 40 return 0; 41 }
觉得可以通过排序进行优化,这种专业的东西留到以后做吧,^_^