当前位置: 首页 > 面试经验 >

【华为OD机试2023】预定酒店(Python)

优质
小牛编辑
87浏览
2023-03-28

【华为OD机试2023】预定酒店(Python)

题目描述:

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

备注:

1)酒店价格数组A和小明的心理价位x均为整型数据;(0 < n,k,x < 10000)

2)优先选择价格最接近心理价位的酒店;若两家酒店和心理价位差价相同,则选择价格较低的酒店。(比如100元和300元距离心理价位200元同样接近,此时选择100元);

3)酒店价格可能相同重复。

输入描述:

第一行:n, k, x

第二行:A[0] A[1] A[2]…A[n-1]

输出描述:

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

补充说明:

1)酒店价格数组A和小明的心理价位x均为整型数据

2)优先选择价格最接近心理价位的酒店;若两家酒店距离心理价位差价相同,则选择价格较低的酒店。(比如100元和300元距离心理价位200元同样接近,此时选择100元)

3)酒店价格可能相同重复。

示例1

输入:

10 5 6

1 2 3 4 5 6 7 8 9 10

输出:

4 5 6 7 8

说明:

数组长度n = 10,筛选个数k = 5,目标价位x=6

示例2

输入:

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

示例3

输入:

6 3 1000

30 30 200 500 70 300

输出:

200 300 500

解题思路:

用{ key1=差价1 : [ 酒店价格1 , 酒店价格2 ] , key2=差价2 : [ 酒店价格3 , 酒店价格4 ] ...}的格式存储数据,然后将字典转为列表,根据差价升序排列,然后差价相同的酒店根据价格升序排列。最后根据k值计数输出


n,k,x=map(int,input().split())
lst=list(map(int,input().split()))
dict={}
for value in lst:
chajia=abs(value-x)
if dict.get(chajia)==None:
dict[chajia]=[value]
else:
dict[chajia].append(value)
jiudian=list(dict.items())
# print(jiudian)
jiudian_order=sorted(jiudian,key=lambda x:int(x[0]))
# print(jiudian_order)
selected=[]
for item in jiudian_order:
if k>=len(item[1]):
k-=len(item[1])
selected.extend(item[1])
else:
selected.extend(sorted(item[1])[0:k])
break
print(' '.join(map(str,sorted(selected))))

#华为机试,emo了#
 类似资料: