UVA - 10487 Closest Sums

来源:互联网 发布:数学专业程序员 编辑:程序博客网 时间:2024/06/01 08:20

题目大意:输入一个 n,以下 n 行给出 n 个数,然后输入一个 m,以下 m 行给出 m 个被询问的数,求 n 个数任意两两相加的和中最接近被询问的数是多少。
解题思路:sum 记任意两数和,减去被询问的数,绝对值最小的即所求值。

0x3f3f3f3f表示无穷大

#include<iostream> #include<cstdio>#include<cmath>#include<string.h>#include<stdlib.h>#include<algorithm>#include<queue>#include<map>using namespace std;const int MAXN = 1000000;int sum[MAXN], num[MAXN];int cnt = 0;int main() {    int n, m;    while (scanf("%d", &n) && n) {        memset(sum, 0, sizeof(sum));        for (int i = 0; i < n; i++)            scanf("%d", &num[i]);        int t = 0;        for (int i = 0; i < n; i++)            for (int j = i+1; j < n; j++)                sum[t++] = num[i] + num[j];        printf("Case %d:\n", ++cnt);        scanf("%d", &m);        int tag;        while(m--) {            scanf("%d", &tag);            int tmp = 0x3f3f3f3f, ans;            for (int i = 0; i < t; i++)                if (fabs(sum[i] - tag) < tmp) {                    tmp = fabs(sum[i] - tag);                    ans = sum[i];                }        printf("Closest sum to %d is %d.\n", tag, ans);        }    }    return 0;}
0 0
原创粉丝点击