您好,欢迎来到九壹网。
搜索
您的当前位置:首页2024华为OD试题及答案-A050-预订酒店

2024华为OD试题及答案-A050-预订酒店

来源:九壹网
题目描述

放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店(n>=k>0),并由低到高打印酒店的价格。

输入描述

第一行:n, k, x
第二行:A[0] A[1] A[2]…A[n-1]

输出描述

从低到高打印筛选出的酒店价格

备注

用例
输入10 5 6
1 2 3 4 5 6 7 8 9 10
输出4 5 6 7 8
说明
输入

10 4 6
10 9 8 7 6 5 4 3 2 1

输出4 5 6 7
说明
输入6 3 1000
30 30 200 500 70 300
输出200 300 500
说明

解题思路

题目要求从一个酒店价格数组中找到距离心理价位 xxx 最近的 kkk 个酒店,并按价格从低到高输出。我们可以按以下步骤实现:

  1. 读取输入的 nnn、kkk、xxx 以及酒店价格数组 AAA。
  2. 计算每个酒店价格与心理价位 xxx 的差值,并将酒店价格和差值存储在一个数组中。
  3. 按照差值从小到大排序,如果差值相同则按价格从低到高排序。
  4. 取前 kkk 个酒店价格,按价格从低到高排序输出。

C++程序


#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int n, k, x;
    cin >> n >> k >> x;
    
    vector<int> prices(n);
    for (int i = 0; i < n; ++i) {
        cin >> prices[i];
    }

    vector<pair<int, int>> diffs;
    for (int i = 0; i < n; ++i) {
        diffs.push_back({abs(prices[i] - x), prices[i]});
    }

    sort(diffs.begin(), diffs.end(), [](const pair<int, int>& a, const pair<int, int>& b) {
        if (a.first != b.first)
            return a.first < b.first;
        return a.second < b.second;
    });

    vector<int> result;
    for (int i = 0; i < k; ++i) {
        result.push_back(diffs[i].second);
    }

    sort(result.begin(), result.end());

    for (int i = 0; i < k; ++i) {
        cout << result[i];
        if (i < k - 1) cout << " ";
    }
    cout << endl;

    return 0;
}

Python程序


def find_top_k_hotels(n, k, x, prices):
    diffs = [(abs(price - x), price) for price in prices]
    diffs.sort(key=lambda pair: (pair[0], pair[1]))

    top_k_prices = [diffs[i][1] for i in range(k)]
    top_k_prices.sort()

    return top_k_prices

# 输入
n, k, x = map(int, input().split())
prices = list(map(int, input().split()))

# 找到最近的k个酒店价格并输出
result = find_top_k_hotels(n, k, x, prices)
print(" ".join(map(str, result)))

用例验证

输入

5 3 10
12 15 10 9 11

输出

9 10 11

解释:距离心理价位10最近的3个价格是9、10、11,按价格从低到高排序。

以上代码可以通过给定的用例验证。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务