首页 > 试题广场 >

中位数

[编程题]中位数
  • 热度指数:14020 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数(或最中间两个数据的平均数). 给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数)

输入描述:
该程序包含多组测试数据,每一组测试数据的第一行为N,代表该组测试数据包含的数据个数,1<=N<=10000.
接着N行为N个数据的输入,N=0时结束输入


输出描述:
输出中位数,每一组测试数据输出一行
示例1

输入

4
10
30
20
40
3
40
30
50
4
1
2
3
4
0

输出

25
40
2
while True:
    try:
        a = int(input())
        list1 = []
        for i in range(a):
            b = int(input())
            list1.append(b)
        list1.sort()
        if len(list1)%2 == 1:
            c = len(list1)//2
            print(list1[c])
        else:
            c = len(list1)//2
            print((list1[c]+list1[c-1])//2)
    except:
        break


发表于 2020-12-11 12:03:37 回复(0)
try:
    while True:
        num = int(input())
        mouses = []
        for i in range(num):
            mouses.append(int(input()))
        mouses.sort()
        if num % 2 == 1:
            print(mouses[num//2])
        else:
            print((mouses[num//2]+mouses[num//2-1])//2)
except Exception:
    pass
编辑于 2018-10-08 22:38:17 回复(0)

python解法。不要忘了要对数组排序~



while True:
    try:
        a,res=int(input()),[]
        if a!=0:
            for i in range(a):
                res.append(int(input()))
            res.sort()
            resLen=len(res)
            print(res[resLen//2] if resLen%2==1 else (res[resLen//2]+res[resLen//2-1])//2)
    except:
        break
发表于 2017-10-06 13:58:55 回复(0)
while 1:
    try:
        n=int(input())
        s=[]
        for i in range(n):
            s.append(int(input()))
        s=sorted(s)
        l=len(s)
        if l%2 == 0:
            print(int(0.5*(s[l//2-1]+s[l//2])))
        else:
            print(int(s[(l-1)//2]))
    except:
        break

发表于 2017-09-04 14:45:20 回复(0)