uva 10487 Closest Sums(二分搜尋)

來源:互聯網
上載者:User

題目串連:10487 - Closest Sums


題目大意:給出n 個數值, 在對應給出m個尋找數值,要求每個尋找數值在最先給出的n個數值中找到兩個數值,是的這兩個數值的和是所有任意兩兩數值的和中最接進尋找數值的。


解題思路:將n個數任意兩兩數值的和計算出來後儲存在數組當中,然後從小到大排列,最後用二分的方法尋找,注意有兩個的話輸出最小的。

#include <stdio.h>#include <set>#include <vector>#include <algorithm>using namespace std;const int N = 1005;int num[N];vector<int> sum;int main() {    int n, m, v, cas = 1;    vector<int>::iterator it;    while (scanf("%d", &n) == 1 && n) {sum.clear();for (int i = 0; i < n; i++) {    scanf("%d", &num[i]);    for (int j = 0; j < i; j++)sum.push_back(num[i] + num[j]);}sort(sum.begin(), sum.end());scanf("%d", &m);printf("Case %d:\n", cas++);for (int i = 0; i < m; i++) {    scanf("%d", &v);    it = lower_bound(sum.begin(),sum.end(), v);    int Min = *it;    if (it != sum.begin() && abs(*(it - 1) - v) < abs(Min - v))Min = *(it - 1);    printf("Closest sum to %d is %d.\n", v, Min);  }    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.