問題はこちら
No.275 中央値を求めよ - yukicoder
ソートして中央値を求めるだけ
要素の個数が偶数の時にちょっと注意が必要
int c(int*a,int*b){return*a-*b;} int main(){ int a[1010]; int n,i; scanf("%d",&n); for(i=0;i<n;i++)scanf("%d",a+i); qsort(a,n,4,c); printf("%f",(a[n/2]+a[(n-1)/2])/2.0); //2で割ると整数型の除算となり切り捨てられるので2.0にする return 0; }
n/2と(n-1)/2はnが奇数のとき同じ値となり配列の真ん中を指す
偶数の時は真ん中2つを指す
いつものように読み飛ばしを頑張って
x,a[999]; c(int*a,int*b){x=*a-*b;} main(i){ for(;~scanf("%d",a-i--);); qsort(a,~i,4,c); x=!printf("%f",(a[~i/2]+a[~-~i/2])/2.); }
123B