一、题目描述
放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的 数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店 (n>=k>0) ,并由低到高打印酒店的价格。
二、输入描述
第一行: n,k,x
第二行: A[o] A[1] A[2]…A[n-1]
三、输出描述
从低到高打印筛选出的酒店价格。
四、解题思路
- 读取输入的酒店数量 hotelCount,选择数量 selectCount,和心理价位 targetPrice;
- 创建一个大小为 hotelCount 的整数数组 priceArr,用于存储酒店价格;
- 循环读取 hotelCount 个价格,并将其存储到 priceArr 数组中;
- 对 priceArr 数组进行排序,以便按价格从低到高进行处理;
- 创建一个 ArrayList,用于存储每个酒店价格与心理价位的差值;
- 遍历排序后的 priceArr 数组,计算每个酒店价格与 targetPrice 的差值,并将酒店价格和差值存储到 ArrayList 中;
- 根据差值对 ArrayList 进行排序,如果差值相同,则按价格从低到高进行排序;
- 创建一个 ArrayList,用于存储筛选出的酒店价格;
- 遍历排序后的 ArrayList,将前 selectCount 个酒店价格加入到筛选列表中;
- 对筛选列表进行排序,以便按价格从低到高打印;
- 遍历筛选列表,按顺序打印酒店价格;
五、Python算法源码
import sys
while True:
if __name__ == "__main__":
try:
n, k, x = map(int, (sys.stdin.readline().strip()).split())
A = list(map(int, (sys.stdin.readline().strip()).split()))
Gap = []
res = []
for i in A:
if i - x < 0:
Gap.append((abs(i - x) - 0.5, i))
else:
Gap.append((i - x, i))
Gap.sort()
for j in range(k):
res.append(Gap[j][1])
res.sort()
for a in res:
print(a, end=" ")
except:
break
六、效果展示
1、输入
10 4 6
10 9 8 7 6 5 4 3 2 1
2、输出
4 5 6 7
3、思路
数组长度n = 10,筛选个数 k = 4,目标价位x = 6,当4 和8 距离x 相同时,优先选择价格低的。
- 对酒店价格进行排序
- 酒店价格与心理价位差值
- 根据差值进行排序
- 筛选出的酒店价格
🏆下一篇:华为OD机试真题 Python 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(Python)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,发现新题目,随时更新,全天CSDN在线答疑。