1.题目详情
世博会志愿者的选拔工作正在A市如火如荼的进行。为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。
现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。
2.解题思路
学号和成绩需要匹配,成绩输出的同时学号也不能改变
如何比较笔试成绩?
同分的情况怎么处理?
3.代码实现
import math #为了用向下取整函数
n,m = map(int,input().split()) #n为选手总人数,m为录取人数
mm = math.floor(m * 1.5) #录取总人数
ns = []
arr = []
for i in range(n):
each = input().split() #每个学生的学号,成绩
each[0] = int(each[0]) #学生的学号
each[1] = int(each[1]) #学生的成绩
ns.append(each) #这个列表里是学号加成绩
for i in range(0,n-1): #把成绩按从小到大排序,学号也得换位置
for j in range(0,n-1-i): #冒泡排序
if ns[j][1] > ns[j+1][1]:
tmp = ns[j][1]
ns[j][1] = ns[j+1][1]
ns[j+1][1] = tmp
tmpp = ns[j][0] #学号也得换位置
ns[j][0] = ns[j + 1][0]
ns[j+1][0] = tmpp
ns = ns[::-1] #由大到小排序
if ns[m][1] == ns[m+1][1]:
print(ns[m][1], mm+1)
else:
print(ns[m][1], mm)
for h in range(mm):
print(ns[h][0],ns[h][1]) #分着写就能去掉中括号,目前没想到更好的解决办法
while h == m:
if ns[h + 1][1] == ns[h][1]: #同分情况
print(ns[h+1][0], ns[h+1][1])
break
4.知识点
输出分着写就能去掉中括号了
向下取整:math.floor
向上取整:math.ceil
注意导入math库