NC214022. 中位数
描述
输入描述
第一行输入一个数N用来表示数组的长度(N<=100)
第二行输入N个数字,并以一个空格隔开
输出描述
输出N个数字的中位数,若为小数则保留两位小数,若为整数则直接输出
示例1
输入:
5 1 4 5 3 2
输出:
3
示例2
输入:
8 1 6 4 7 8 2 3 5
输出:
4.50
示例3
输入:
8 4 1 6 5 8 9 16 10
输出:
7
C(clang11) 解法, 执行用时: 2ms, 内存消耗: 372K, 提交时间: 2020-11-24 18:45:05
#include<stdio.h> int main() { int n,i,j,s,b; scanf("%d",&n); int a[n]; for(i=0;i<n;i++) {scanf("%d",&a[i]); } getchar(); for(i=1;i<n;i++) { for(j=0;j<n-i;j++) {if(a[j]>a[j+1]) {s=a[j+1]; a[j+1]=a[j] ; a[j]=s; } } } if(n%2==0) {if((a[n/2]+a[(n/2)-1])%2==0) {int avg=(a[n/2]+a[(n/2)-1])/2; printf("%d",avg); } else{float bvg=(a[n/2]+a[(n/2)-1])/(float)2; printf("%.2f",bvg); } } else { b=(n+1)/2-1 ; printf("%d",a[b]); } return 0; }
C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 532K, 提交时间: 2023-07-18 10:58:55
#include<bits/stdc++.h> using namespace std; int a[105]; int main() { int i,n; cin>>n; for(i=1;i<=n;i++) { scanf("%d",&a[i]); } sort(a+1,a+1+n); if(n%2==0) { if((a[n/2]+a[n/2+1])%2==0) printf("%.d",(a[n/2]+a[n/2+1])/2); else printf("%.2lf",(a[n/2]+a[n/2+1])/2.0); } else printf("%d",a[n/2+1]); return 0; }
Python3 解法, 执行用时: 42ms, 内存消耗: 4544K, 提交时间: 2023-01-21 15:03:20
n=int(input()) l=list(map(int,input().split())) l.sort() if n%2==1: print(l[n//2]) else: x=n//2 ke=(l[x]+l[x-1])/2 if ke!=int(ke): print("%.2f"%ke) else: print(int(ke))