每日一题12006-分数线划定

1.题目详情

世博会志愿者的选拔工作正在A市如火如荼的进行。为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。

现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。
每日一题12006-分数线划定

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库

上一篇:Linux 中的网络指令:如何查看一个域名有哪些 NS 记录?


下一篇:.Net Core Linux centos7行—hyper-v安装linux系统和.net core sdk