Python入门习题(73)——OpenJudge百练习题:买手机
OpenJudge百练第4069号习题:买手机
- 题目描述
- 解题思路
- 参考答案
- 测试用例
- 小结
题目描述
来源
OpenJudge网站 – 百练习题集-第4069号习题
要求
总时间限制: 1000ms 内存限制: 65536kB
描述
有一天你想去网上买手机。各式各样可供选择的手机太多了,让你不知道该选哪一款,于是你决定看看各个型号的销售情况和其他人对该手机的评价。网站上可以得到手机的价格、销售量、其他用户对该手机的平均打分。在一番浏览之后,你决定在价格能承受的范围内,销售量越大的手机越好;销售量相同时,平均得分越高的手机越好;销售量和平均打分都相同时,价格越低越好。假设现在你有k元钱,给你n个手机的信息,给出你能买得起的所有手机,并按照上述的偏好从好到差排序输出。
一个手机有四个信息,都是非负整数,分别为产品id、价格、销售量、平均得分。四个属性取值都在10000以内。
输入
第一行是一个整数m,表示有m组试样例。
接下来m块,每块第一行是两个整数k和n,表示你有k元钱,有n个手机可购买。n不大于50。
接下来n行,每行是四个整数,用空格隔开,分别是一个手机的产品id、价格、销售量、平均得分。
输入保证没有价格、销售量、平均得分都相同的产品,且至少有一个买得起的产品。
输出
对于每组输入,输出该组你能买得起的所有手机的id,并按照上述的偏好从好到差排序。
样例输入
2
2000 3
1 2000 3278 4
2 1899 5666 5
3 1799 6003 5
1900 3
1 2000 3278 4
2 1899 5666 5
3 1799 5666 5
样例输出
3
2
1
3
2
解题思路
- 从一批手机里头,从好到差排序输出符合要求的手机的步骤是:
(1)对于价格上限k,选出价钱小于等于k的全部手机。
(2)以销售量、得分、价钱依次作为第一、第二和第三排序关键字进行排序。销售量和得分是降序排序,价钱则是升序排序。
参考答案
test_num = int(input())
for t in range(test_num):k, n = [int(s) for s in input().split()]phones = []for i in range(n):phone = [int(s) for s in input().split()]if phone[1] <= k:phones.append(phone)phones.sort(key = lambda p: p[1]) #按价钱排序phones.sort(key = lambda p: p[3], reverse=True) #按得分排序phones.sort(key = lambda p: p[2], reverse=True) #按销售量排序for p in phones:print(p[0])
测试用例
- 题目描述给出的测试用例有两组测试数据。第一组覆盖了全部手机都满足价钱要求的情形。第二组测试用例覆盖了有手机价钱过高的情形。
- 全部手机价钱都大于k的情形。
样例输入
1
1700 3
1 2000 3278 4
2 1899 5666 5
3 1799 5666 5
样例输出
(注:输出为空!!)
小结
- 对于组合关键字的排序,本题题解示范了Python手册推荐的排序方法。
- 本题中,首先对第三排序关键字排序,接着对第二排序关键字排序,然后对第一排序关键字排序。由于采用的排序算法具有稳定性,因此达成组合关键字排序的效果。
Python入门习题(73)——OpenJudge百练习题:买手机相关推荐
- Python入门习题大全——数字 8
Python入门习题大全--索引 编写4个表达式,它们分别使用加法.减法.乘法和除法运算,但结果都是数字8.为使用print语句来显示结果,务必将这些表达式用括号括起来,也就是说,你应该编写4行类似于 ...
- Python入门习题大全——词汇表2
Python入门习题大全--索引 既然你知道了如何遍历字典,现在请整理你为完成上一个例题而编写的代码,将其中的一系列 print 语句替换为一个遍历字典中的键和值的循环.确定该循环正确无误后,再在词汇 ...
- Python入门习题大全——词汇表
Python入门习题大全--索引 Python 字典可用于模拟现实生活中的字典,但为避免混淆,我们将后者称为词汇表. 想出你在前面学过的5个编程词汇,将它们用作词汇表中的键,并将它们的含义作为值存储在 ...
- Python入门习题大全——大号T恤
Python入门习题大全--索引 修改函数上一个"T恤"例题中的make_shirt(),使其在默认情况下制作一件印有字样"I lovePython"的大号T恤 ...
- Python入门习题大全——T恤
Python入门习题大全--索引 编写一个名为make_shirt()的函数, 它接受一一个尺码以及要印到T恤上的字样.这个函数应打印一个句子,概要地说明T恤的尺码和字样. 使用位置实参调用这个函数来 ...
- Python入门习题大全——猫和狗
Python入门习题大全--索引 创建两个文件cats.txt 和dogs.txt,在第一个文件中至少存储三只猫的名字,在第二个文件中至少存储三条狗的名字.编写一个程序,尝试读取这些文件,并将其内容打 ...
- Python入门习题大全——人生的不同阶段
Python入门习题大全--索引 设置变量 age 的值,再编写一个 if-else-else 结构,根据 age 的值判断处于人生的哪个阶段. 如果一个人的年龄小于 2 岁,就打印一条消息,指出他是 ...
- Python入门习题大全——检查用户名
Python入门习题大全--索引 按下面的说明编写一个程序,模拟网站确保每位用户的用户名都独一无二的方式. 创建一个至少包含5个用户名的列表,并将其命名为current_users. 再创建一个包含5 ...
- Python入门习题大全——喜欢的水果
Python入门习题大全--索引 创建一个列表,其中包含你喜欢的水果,再编写一系列独立的 if 语句,检查列表中是否包含特定的水果. 将该列表命名为 favorite_fruits,并在其中包含三种水 ...
- Python入门习题大全—— 3 的倍数
Python入门习题大全--索引 创建一个列表,其中包含 3 ~ 30 内能被 3 整除的数字:再使用一个 for 循环将这个列表中的数字都打印出来. # 3 的倍数 san = [value for ...
最新文章
- php 去除中英文空格,php去除字符串首尾中英文空格程序-PHP源码
- 项目2---机柜和物理服务器
- python在日常工作处理中的应用-近期工作中应用Python的一些经验总结
- android tools ignore,android 中tools:ignore=UselessParent这个属性的含义是什么?
- 牛客题霸 NC21 链表内指定区间反转
- c语言数值运算法和非数值运算法,数据结构(c语言)1.数据结构是一门研究非数值计算的程序设计问题中计算机的 以及它们之间的 _ 和运算等的学科。① A....
- 详解python3如何调用c语言代码
- [c++] - 简单的冒泡
- java知识回顾_Java – 2012年回顾和未来预测
- jQuery 事件 - ready() 方法
- 数据结构和算法之排序一:归并排序
- 【转载】web.xml中的classpath和classpath*
- salt把返回写入到mysql
- mysql 物理删除 索引_MySQL 索引重建
- Git--分布式版本控制系统
- Hibernate中Java对象的生命周期
- html中如何显示emf图片,emf是什么格式
- 计算机的用户账户,计算机用户名是什么意思(如何修改和设置用户名)
- java 数组定义是必须指定长度吗
- debian下安装小企鹅输入法