#szsc4a. 成绩单上的中位数
成绩单上的中位数
小杨是班里的体育委员,体能测试结束后,老师把全班同学的成绩按座位顺序交给了他,一点也不整齐。小杨想从这份成绩里看出两件事:这次成绩的中位数,以及从高到低数第 k 个成绩是多少。
把成绩从小到大排好队后,如果一共有奇数个,中位数就是正中间的那一个;如果一共有偶数个,中位数就是最中间两个成绩的平均数,这时可能带小数。名次按从高到低数,成绩相同的同学各占一个名次,例如从高到低是 95、95、88、84 时,第 1 个是 95,第 2 个也是 95,第 3 个才是 88。
默认小猫角色和白色背景,编写程序帮小杨算出这两个结果。样例舞台效果如下图:

输入描述
新建列表“成绩”,第 i 项表示第 i 个座位上同学的体能测试成绩,这些成绩没有排好序。1≤列表“成绩”的项目数≤20,每一项都是整数且 1≤每一项的成绩≤100。
新建变量“k”,表示小杨想查询的名次,1≤k≤列表“成绩”的项目数。
输出描述
新建变量“中位数”,保存全部成绩的中位数,它可能带小数(与正确答案相差不超过 0.01 即算正确)。
新建变量“第k高分”,保存把全部成绩从高到低排列后的第 k 个成绩。
编程提示
- 列表“成绩”是只读的输入数据,不能添加、删除、替换它的数据,也不能直接在它上面排序;请新建一个列表,把“成绩”逐项复制过去,再对新列表排序。
- 排好序后,项目数是奇数就取正中间的那一项;是偶数就把最中间的两项相加再除以 2。
- 从小到大排好的列表里,倒数第 k 项就是从高到低数的第 k 个成绩。
- 输入变量由系统在运行时给出,不要使用【询问并等待】积木,也不要在程序中修改“k”。
输入样例
成绩 = [78, 95, 62, 88, 71, 95, 84]
k = 3
输出样例
中位数 = 84
第k高分 = 88
输入样例
成绩 = [66, 92, 78, 85, 92, 59]
k = 2
输出样例
中位数 = 81.5
第k高分 = 92