範例程式碼 uva10487

//uva10487
#include <cstdio>
#include <iostream>

using namespace std;

int n, m, a[1005];

int int_abs(int n) { return n >= 0 ? n : -n; }

int solve(int num) {
	int i, j, ans = a[0]+a[1]; // at least two
	for(i = 0; i < n; i++)
		for(j = i + 1; j < n; j++)
			if(int_abs(a[i] + a[j] - num) < int_abs(ans - num))
				ans = a[i] + a[j];
	return ans;
}

int main() {
	int i, req, tcnt = 0;
	while(scanf("%d", &n) == 1 && n != 0) {
		printf("Case %d:\n", ++tcnt);
		for(i = 0; i < n; i++)
			scanf("%d", &a[i]);
		scanf("%d", &m);
		for(i = 0; i < m; i++) {
			scanf("%d", &req);
			printf("Closest sum to %d is %d.\n", req, solve(req));
		}
	}
	return 0;
}