輸入 10 個整數,移除最大值與最小值各一個,計算剩餘 8 個數的平均值。
int[] data = new int[10];
for (int i = 0; i < 10; i++)
data[i] = int.Parse(Console.ReadLine());
double avg = data.OrderBy(x => x).Skip(1).Take(8).Average();
Console.WriteLine(avg);
OrderBy(x => x):升序排序Skip(1):跳過最小值 (第 1 個)Take(8):取中間 8 個Average():計算平均值 (自動返回 double)int[] data = new int[10];
for (int i = 0; i < 10; i++) data[i] = int.Parse(Console.ReadLine());
Array.Sort(data); // 排序
int sum = 0;
for (int i = 1; i < 9; i++) // 索引 1~8
sum += data[i];
double avg = sum / 8.0; // 注意 8.0 強制浮點除法
Console.WriteLine(avg);
int.TryParse 循環驗證Skip/Take 只移除各一個,符合「去掉一個最大值、一個最小值」語義double TrimmedMean(int[] arr, int trimCount = 1)public static class ArrayExtensions {
public static double TrimmedMean(this int[] source, int trim = 1) {
if (source == null || source.Length <= 2 * trim)
throw new ArgumentException("數據量不足以去極值");
return source.OrderBy(x => x).Skip(trim).Take(source.Length - 2 * trim).Average();
}
}
// 使用
double avg = data.TrimmedMean(1);
數據量極大 (百萬級) 時,OrderBy O(n log n) 可優化為 QuickSelect O(n) 找第 k 小,但 10 個數完全無性能壓力,優先可讀性。