输出:
200 300 500
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

python解法

import heapq

# 读取输入数据
n, k, x = map(int, input().split())  # n 为酒店数量,k 为需要找出的酒店数量,x 为目标价格
A = list(map(int, input().split()))  # A 为酒店价格列表

# 计算差值并存储元组 (差值, 酒店价格),用于后续查找最近的酒店
arr = [(abs(a - x), a) for a in A]

# 从堆中获取 k 个最小差值的酒店价格
closest_hotels = heapq.nsmallest(k, arr)

# 提取酒店价格并按升序排序
result = sorted(h[1] for h in closest_hotels)

# 输出结果
print(" ".join(map(str, result)))

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

java解法

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 创建Scanner对象用于读取输入
        Scanner sc = new Scanner(System.in);

        // 读取输入的n, k, x,分别表示酒店数量、需要找出的酒店数量和目标价格
        int n = sc.nextInt();
        int k = sc.nextInt();
        int x = sc.nextInt();

        // 创建一个优先队列,存储由两部分组成的数组:价格和与目标价格x的差值
        // 优先队列根据差值(绝对差)进行排序,如果差值相同,则根据价格进行排序
        PriorityQueue<int[]> queue = new PriorityQueue<>((a, b) -> 
                a[1] != b[1] ? a[1] - b[1] : a[0] - b[0]
        );

        // 读取每个酒店的价格,并将价格和其与目标价格的差值存入优先队列
        for (int i = 0; i < n; i++) {
            int price = sc.nextInt();
            queue.offer(new int[]{price, Math.abs(price - x)});  // 将价格和差值作为数组存入队列
        }

        // 创建一个List来存储前k个最接近目标价格的酒店价格
        List<Integer> result = new ArrayList<>();

        // 从优先队列中取出前k个最接近的酒店价格
        for (int i = 0; i < k; i++) {
            result.add(queue.poll()[0]);  // 取出酒店价格并加入到结果列表
        }

        // 对结果列表进行排序,确保输出的价格按升序排列
        Collections.sort(result);

        // 输出最终结果,以空格分隔酒店价格
        for (int price : result) {
            System.out.print(price + " ");
        }
    }
}

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

C++解法

更新中
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

C解法

更新中
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

JS解法

const readline = require('readline');

// 创建读取输入的接口
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// 监听第一行输入
rl.on('line', (input) => {
    // 第一行包含 n, k, x,分别表示酒店数量、需要找出的酒店数量和目标价格
    const [n, k, x] = input.split(' ').map(Number);

    // 监听第二行输入
    rl.on('line', (input) => {
        // 第二行包含酒店价格数组
        const A = input.split(' ').map(Number);

        // 创建一个数组,将每个价格和其与目标价格的差值存储为二元数组 [差值, 价格]
        const heap = A.map(a => [Math.abs(a - x), a]);

        // 按照差值从小到大排序;差值相同时按价格从小到大排序
        heap.sort((a, b) => a[0] - b[0]);

        // 截取前 k 个元素,并提取价格,随后对价格进行升序排序
        const result = heap.slice(0, k).map(item => item[1]).sort((a, b) => a - b);

        // 输出最终结果,多个价格之间用空格分隔
        console.log(result.join(' '));

        // 关闭输入接口
        rl.close();
    });
});

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

注:本文转载自blog.csdn.net的CodeClimb的文章"https://blog.csdn.net/CodeClimb/article/details/144539394"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!