我是c#的新手,想要嘗試讓用戶輸入3個數字並獲取中位數,然後再輸入4個數字並獲得另一箇中位數,但我不知道如何獲取數字數字順序。 人們告訴我使用數組或變量,但在閱讀了一些關於這些數據之後,我仍然不知道如何編程一個數字順序。如果有人有提示,我會非常感激。提前致謝。如何在c#中進行3位數和4位數的中位數?
回答
中位數是中間項的排序序列:
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];
看起來正確,但我會爲最後一行添加詳細說明代碼,即使作爲一個有經驗的程序員,它看起來勢不可擋!有很多事情發生在那裏,noob不會理解=) –
即使它縮短了代碼,我也會建議在條件運算符'?'上使用'if' /'else'。它使代碼更加清晰,閱讀和理解,特別是如果你不是一個有經驗的程序員。 –
@伊恩H:我認爲這是品味的問題;我個人懷疑上下文中的「if」:'? :'運算符 - *取決於偶數/奇數長度中位數是兩個項目的平均值或單個項目*或'如果' - *如果我們有甚至長度中位數是平均值,那麼其他項目是單個項目*。我發現這兩個結構都是相當可讀的*。 –
數量動態,你可以這樣做(使用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.
這看起來不錯,只是它不考慮是否有偶數量的數字(平均兩個中間數字而不是僅僅返回一個元素)。 –
如果'數字'爲'null'或沒有項目會怎麼樣? – NotADeveloper
@NotADeveloper謝謝,添加它。 –
- 1. java 4位小數位的二進制
- 2. 從R中的4位或6位數中選擇兩位數
- 3. 如何迭代C中3位數字中的每個數字?
- 4. 在C計數位中旋轉的位
- 5. c中的唯一4位隨機數#
- 6. RegEx驗證4位和5位數字?
- 7. 4位隨機數C++
- 8. 在C++中移位二進制數字
- 9. 如何在VB.NET中移位Ushort 16位整數中的位?
- 10. 將9位數字轉換爲3位3位數字
- 11. 如何在矩陣中查找中位數(行和列)C
- 12. 如何將3位整數格式化爲4位數字符串?
- 13. C++中的8位整數和32位整數之間的按位AND
- 14. 如何對Objective-C中的2位小數進行圓整
- 15. 如何在python中編寫程序生成所有n位數字,只有4位和7位數字?
- 16. 中位數的中位數java實現
- 17. 如何在C++中移位整數值
- 18. 如何在C++中舍入小數位?
- 19. 對32位整數進行位處理
- 20. 如何使用DecimalFormat在一個數字中移位4位小數
- 21. Python中的分位數/中位數/二進制分組
- 22. 如何在一個字節整數中存儲2位,1位,1位和4位值
- 23. DateFormat是否驗證2位數和4位數的值?
- 24. VBA中2位數字大於3位數字的問題
- 25. 在32位整數中對4個值進行編碼
- 26. 如何將4位浮點數轉換爲2位浮點數
- 27. XOR和移位數組中的位
- 28. 如何從java中的3位數以上的數字中獲得可能的3位數組合:
- 29. 如何檢查自己的十在四位數字,在C語言中位數
- 30. 如何在C#中將16位'short'轉換爲32位整數?
可能的重複:https://stackoverflow.com/q/4140719/5779732 –