一、题目描述
【华为OD机试真题】A卷-预定酒店(JAVA)
题目描述:
放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的 数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店 (n>=k>0) ,并由低到高打印酒店的价格
二、输入输出
输入描述:
第一行: n,k,x
第二行: A[o] 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
说明:
数组长度n = 10,筛选个数 k = 4,目标价位x = 6 当4 和8 距离x 相同时,优先选择价格低的4
示例三
输入:
6 3 1000
30 30 200 500 70 300
输出:
200 300 500
备注:
1.酒店价格数组A和小明的心理价位x均为整型数据;(0<n,k,x<10000) 2.优先选择价格最接近心理价位的酒店,若两家酒店和心理价位差价相同,则选择价格较低的酒店。(比如100元和300元距离心理价位200元同样接近,此时选择100元)
3.酒店价格可能相同重复
四、解题思路
- 通过Scanner获取输入n、k和x。
- 输入并排序价格数组。
- 计算每个价格与目标价格的差值,构建价格评分列表。
- 使用自定义排序方法对价格评分列表进行排序。
- 选择前k个价格作为选定的价格列表。
- 对选定的价格列表进行排序。
- 输出选定的价格列表。
五、参考代码
/*
* @Author: mgc
* @Date: 2024-02-02 17:47:00
* @LastEditors: Do not edit
* @LastEditTime: 2024-02-02 17:48:55
*/
// import java.util.*;
// import java.util.HashMap;
// import java.util.Scanner;
// import java.util.regex.Matcher;
// import java.util.stream.Stream;
// import java.util.regex.Pattern;
// import java.util.stream.Collectors;
import java.util.Scanner;
import java.util.*;
class Main {
public static void main(String[] args) {
// 处理输入
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int k = in.nextInt();
int x = in.nextInt();
// 输入并排序价格
int[] prices = new int[n];
for (int i = 0; i < prices.length; i++) {
prices[i] = in.nextInt();
}
Arrays.sort(prices);
// 计算价格评分
ArrayList<int[]> priceRating = new ArrayList<>();
for (int i = 0; i < prices.length; i++) {
int price = prices[i];
int[] pair = new int[2];
pair[0] = price;
pair[1] = Math.abs(price - x);
priceRating.add(pair);
}
// 自定义排序
Collections.sort(priceRating, (o1, o2) -> {
if (o1[1] == o2[1]) {
return o1[0] - o2[0];
} else {
return o1[1] - o2[1];
}
});
// 选择前k个价格
List<Integer> pickedPrices = new ArrayList<>();
for (int i = 0; i < k; i++) {
pickedPrices.add(priceRating.get(i)[0]);
}
pickedPrices.sort(Integer::compareTo);
// 输出选定的价格
for (int i = 0; i < pickedPrices.size(); i++) {
System.out.print(pickedPrices.get(i));
if (i != pickedPrices.size() - 1) {
System.out.print(" ");
}
}
}
}
六、华为OD机试真题汇总目录
【华为OD机试】真题汇总A+B+C+D券(Python实现)
标签:java,JAVA,真题,int,OD,util,import,价格 From: https://blog.csdn.net/u014481728/article/details/137236970