#szsc4a. 成绩单上的中位数

    ID: 9375 传统题 30000ms 512MiB 尝试: 0 已通过: 0 上传者: 标签>排序经典排序算法的复杂应用列表编程题经典排序·三星列表·三星排序·三星算法的复杂应用·二星scratch四级

成绩单上的中位数

小杨是班里的体育委员,体能测试结束后,老师把全班同学的成绩按座位顺序交给了他,一点也不整齐。小杨想从这份成绩里看出两件事:这次成绩的中位数,以及从高到低数第 k 个成绩是多少。

把成绩从小到大排好队后,如果一共有奇数个,中位数就是正中间的那一个;如果一共有偶数个,中位数就是最中间两个成绩的平均数,这时可能带小数。名次按从高到低数,成绩相同的同学各占一个名次,例如从高到低是 95、95、88、84 时,第 1 个是 95,第 2 个也是 95,第 3 个才是 88。

默认小猫角色和白色背景,编写程序帮小杨算出这两个结果。样例舞台效果如下图:

成绩单上的中位数舞台效果

输入描述

新建列表“成绩”,第 i 项表示第 i 个座位上同学的体能测试成绩,这些成绩没有排好序。1≤列表“成绩”的项目数≤20,每一项都是整数且 1≤每一项的成绩≤100。

新建变量“k”,表示小杨想查询的名次,1≤k≤列表“成绩”的项目数。

输出描述

新建变量“中位数”,保存全部成绩的中位数,它可能带小数(与正确答案相差不超过 0.01 即算正确)。

新建变量“第k高分”,保存把全部成绩从高到低排列后的第 k 个成绩。

编程提示

  1. 列表“成绩”是只读的输入数据,不能添加、删除、替换它的数据,也不能直接在它上面排序;请新建一个列表,把“成绩”逐项复制过去,再对新列表排序。
  2. 排好序后,项目数是奇数就取正中间的那一项;是偶数就把最中间的两项相加再除以 2。
  3. 从小到大排好的列表里,倒数第 k 项就是从高到低数的第 k 个成绩。
  4. 输入变量由系统在运行时给出,不要使用【询问并等待】积木,也不要在程序中修改“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