Python入门习题(25)——CCF CSP认证考试真题:小中大
程序员文章站
2022-04-02 09:35:55
...
〖题目背景〗
在数据分析中,最小值、最大值以及中位数是常用的统计信息。
〖题目描述〗
老师给了你n个整数组成的测量数据,保证有序(可能为升序或降序),可能存在重复的数据。请统计出这组测量数据中的最大值、中位数以及最小值,并按照从大到小的顺序输出这三个数。
〖输入格式〗
从标准输入读入数据。
第一行输入一个整数n,在第二行中存在n个有序的整数,表示测量数据,可能为升序或降序排列,可能存在连续多个整数相等,整数与整数之间使用空格隔开。
〖输出格式〗
输出到标准输出。
包含一行,包括最大值、中位数以及最小值共三个数,并按照从大到小的顺序输出。数据与数据之间用空格隔开。对于整数请直接输出整数,对于可能出现的分数,请输出些舍五入保留1位小数的结果。
〖样例1输入〗
3
-1 2 4
〖样例1输出〗
4 2 -1
〖样例1解释〗
4为最大值,2为中位数,一1为最小值。
〖样例2输入〗
4
-2 -1 3 4
〖样例2输出〗
4 1 -1
〖样例2解释〗
4为最大值,(-1+3)÷2=1为中位数,-2为最小值。
解题思路
- 求出n个整数中的最大值和最小值。无论是从小到大排序还是从大到小排序,最大值和最小值总是在第一个和最后一个。先假定最大值处于第一个,最小值在最后一个。如果最大值小于最小值,那么调换它们。
- 中位数与排序顺序无关。
- 中位数与n的奇偶性有关。如果n为奇数,那么整数序列nums中下标为的元素正是中位数。如果n为偶数,那么中位数是(nums[] + nums[ - 1] ) / 2。下标从0开始。
- 需要注意的细节是,如果(nums[] + nums[ - 1] ) / 2的结果是小数,那么输出要保留小数1位。
参考答案
n = int(input())
nums = [int(s) for s in input().split()]
#求最大值、最小值
maxnum = nums[0]
minnum = nums[-1]
if maxnum < minnum:
maxnum, minnum = minnum, maxnum
print(maxnum, end=' ') #输出最大值
#求中位数并输出
if len(nums) % 2 == 1:
mid = nums[len(nums) // 2]
print(mid, end=' ')
else:
mid_2_sum = nums[len(nums) // 2] + nums[len(nums) // 2 - 1]
if mid_2_sum % 2 == 0:
print(mid_2_sum // 2, end = ' ') #中位数是整数
else:
print("%.1f"%(mid_2_sum / 2), end=' ') #中位数是小数
print(minnum) #输出最小值
测试用例
题目描述中给出的2个测试用例(即2组样例输入和输出样例),已经覆盖了以下情形:
- n>2, n为奇数,从小到大排序,中位数是整数。
- n>2, n为偶数,从小到大排序,中位数是整数。
n的奇偶性,排序顺序以及中位数是否为小数这3个因素会影响计算过程,但彼此之间没有关联,所以无需构造两两组合的情形。n个整数中有重复的数,这一点与计算无关,无需测试。下面给出的测试用例覆盖了其他情形。
- n = 1的情形。目的是测试数组长度的边界值。题目描述中没指出n>1,所以有必要。
样例输入
1
3
样例输出
3 3 3 - n = 2的情形 。目的是测试数组长度的边界值。
样例输入
2
-1 3
样例输出
3 1 -1 - 从大到小排序的情形。
样例输入
4
4 3 -1 -2
样例输出
4 1 -2 - 中位数是小数的情形。
样例输入
4
4 3 2 -1
样例输出
4 2.5 -1
由于python中,nums[-1]表示的是nums列表中的最后一个元素,因此本节给出的第一个测试用例能够成功通过。
小结
- 解答本题要注意多项细节。
(1) 排序可能是从小到大,也可能是从大到小。
(2) 中位数的计算与n的奇偶性相关。
(3) 中位数是整数的话,采用整除操作;是小数的话,采用浮点数除法操作。而且,两种情形的输出格式不同。
(4) n等于1,或等于2的话,要特别考虑。
推荐阅读
-
Python入门100道习题(9)——CCF CSP认证考试真题:出现次数最多的数
-
Python入门习题(14)——CCF CSP认证考试真题:数列分段
-
Python入门习题(18)——CCF CSP认证考试真题:中间数
-
Python入门习题(10)——CCF CSP认证考试真题:相反数
-
Python入门习题(20)——CCF CSP认证考试真题:打酱油
-
Python入门习题(17)——CCF CSP认证考试真题:最大波动
-
Python入门习题(23)——CCF CSP认证考试真题:卖菜
-
Python入门习题(29)——CCF CSP认证考试真题:窗口
-
Python入门习题(24)——CCF CSP认证考试真题:小明上学
-
Python入门习题(21)——CCF CSP认证考试真题:最小差值