京東測試系機試題,求中位數,easy
阿新 • • 發佈:2018-12-09
做了京東的機試題目,有一個題目是給出一個整型無序陣列,求增加一個數(可以是整型也可以是float型),不改變這個陣列的中位數。
首先,中位數的意思就是,從小到大進行排列,若是奇數n的話,則中間一個為中位數。若是偶數n的話,則是中間兩個數的平均值。
首先是輸入一個數n,及無序陣列的長度,然後輸入n個數,做一個快排生成一個從小到大的陣列。然後判斷n的奇偶,計算輸出即可,很簡單的思路,直接上程式碼
#include <iostream>
#include <cassert>
#include <stack>
#include <math.h>
#include<algorithm>
using namespace std;
bool cmp(int a,int b){
return a<b;
}
float EvaluateMedian(int a[], int n)
{
sort(a,a+n,cmp);
if(n % 2 !=0)
{
return a[n / 2];
}
else
{
return ((float)(a[n / 2] + a[n / 2 -1]))/ 2;
}
}
int main()
{
int num ;
cin>>num;
int a[100];
for(int i=0;i<num;i++){
cin>>a[i];
}
//使用cout輸出可以自動省去沒有的位數,擇不需要考慮float型的輸出長度
cout<<EvaluateMedian(a, num)<<endl;
return 0;
}