2017-10-11 44 views
-3

我是c#的新手,想要嘗試讓用戶輸入3個數字並獲取中位數,然後再輸入4個數字並獲得另一箇中位數,但我不知道如何獲取數字數字順序。 人們告訴我使用數組或變量,但在閱讀了一些關於這些數據之後,我仍然不知道如何編程一個數字順序。如果有人有提示,我會非常感激。提前致謝。如何在c#中進行3位數和4位數的中位數?

+1

可能的重複:https://stackoverflow.com/q/4140719/5779732 –

回答

2

中位數是中間項排序序列:

https://en.wikipedia.org/wiki/Median

int[] array = new int[] { 15, 7, 110, 20}; 

    Array.Sort(array); 

    // 17.5 
    // if we have odd length (3 items) we just return the middle item 
    // in case of even length (4 items) we compute middle as a average of two "middle" items 
    double median = array.Length % 2 == 0 
    ? (array[array.Length/2] + array[array.Length/2 - 1])/2.0 
    : array[array.Length/2]; 

因此,我們必須

7, 15, 20, 110  - sequence sorted 
(15 + 20)/2 = 17.5 - "middle" item is an average of 15 and 20 

3項目的情況下,說{ 15, 7, 110 }我們有

7, 15, 110   - sequence sorted 
15     - middle item 

編輯:如果三元操作? :double median = ... ? ... : ...;看起來太複雜,可如果你想將變成美好的舊if ... else(見註釋)

... 

double median; 

if (array.Length % 2 == 0) 
    median = (array[array.Length/2] + array[array.Length/2 - 1])/2.0; 
else 
    median = array[array.Length/2]; 
+0

看起來正確,但我會爲最後一行添加詳細說明代碼,即使作爲一個有經驗的程序員,它看起來勢不可擋!有很多事情發生在那裏,noob不會理解=) –

+1

即使它縮短了代碼,我也會建議在條件運算符'?'上使用'if' /'else'。它使代碼更加清晰,閱讀和理解,特別是如果你不是一個有經驗的程序員。 –

+0

@伊恩H:我認爲這是品味的問題;我個人懷疑上下文中的「if」:'? :'運算符 - *取決於偶數/奇數長度中位數是兩個項目的平均值或單個項目*或'如果' - *如果我們有甚至長度中位數是平均值,那麼其他項目是單個項目*。我發現這兩個結構都是相當可讀的*。 –

2

數量動態,你可以這樣做(使用System.Linq):

public static double Median(IEnumerable<int> numbers) 
{ 
    if (numbers == null) throw new ArgumentNullException("numbers"); 

    int[] ordered = numbers.OrderBy(i => i).ToArray(); 

    if (ordered.Length == 0) return double.NaN; 

    if (ordered.Length % 2 == 0) 
    { 
     int half = ordered.Length/2; 
     return (ordered[half] + ordered[half - 1])/2d; 
    } 
    return ordered[ordered.Length/2]; 
} 

這首先用OrderBy()對數組進行排序,然後獲取集合的中間項。在偶數個項目的情況下,它取中間2個項目的平均值。如果收集爲空或爲空,則方法將返回0.

+1

這看起來不錯,只是它不考慮是否有偶數量的數字(平均兩個中間數字而不是僅僅返回一個元素)。 –

+1

如果'數字'爲'null'或沒有項目會怎麼樣? – NotADeveloper

+0

@NotADeveloper謝謝,添加它。 –

相關問題