C#实现:查找数组中与平均值最近及最远的数值
帮你完成找出数组中离平均值最近/最远数的练习
没问题!你已经完成了输入10个正整数、计算平均值和创建数组的核心步骤,接下来只需要补充逻辑就能找出目标数值了。先给你提个小建议:目前你用int类型计算平均值会自动取整,比如总和是123的话,平均值会变成12而不是实际的12.3,这样计算距离时会有误差,建议把平均值改成double类型,用浮点数除法来保证精度。
下面是补充完整后的代码,我会在后面解释关键逻辑:
Console.WriteLine("Geef 10 gehele positieve getallen."); Console.WriteLine("Getal 1:"); int g1 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Getal 2:"); int g2 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Getal 3:"); int g3 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Getal 4:"); int g4 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Getal 5:"); int g5 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Getal 6:"); int g6 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Getal 7:"); int g7 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Getal 8:"); int g8 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Getal 9:"); int g9 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Getal 10:"); int g10 = Convert.ToInt32(Console.ReadLine()); // 改成double类型,用10.0做除法保证浮点数精度 double gemiddelde = (g1 + g2 + g3 + g4 + g5 + g6 + g7 + g8 + g9 + g10) / 10.0; int[] array = new int[10] {g1,g2,g3,g4,g5,g6,g7,g8,g9,g10}; // 初始化最近/最远的数和对应的距离 int closestNumber = array[0]; double smallestDistance = Math.Abs(array[0] - gemiddelde); int farthestNumber = array[0]; double largestDistance = Math.Abs(array[0] - gemiddelde); // 遍历数组,逐个比较距离 foreach (int num in array) { double currentDistance = Math.Abs(num - gemiddelde); // 更新最近的数 if (currentDistance < smallestDistance) { smallestDistance = currentDistance; closestNumber = num; } // 更新最远的数 if (currentDistance > largestDistance) { largestDistance = currentDistance; farthestNumber = num; } } // 输出结果 Console.WriteLine($"Gemiddelde: {gemiddelde:F2}"); Console.WriteLine($"Getal het dichtst bij het gemiddelde: {closestNumber}"); Console.WriteLine($"Getal het verst van het gemiddelde: {farthestNumber}");
关键逻辑解释:
- 距离计算:用
Math.Abs()获取数值和平均值的绝对值,因为我们只关心距离的大小,不管是比平均值大还是小。 - 初始化变量:先把数组第一个元素作为初始的最近/最远数,对应的距离也用第一个元素计算,这样遍历的时候有基准可以比较。
- 遍历比较:逐个检查数组里的每个数,计算它和平均值的距离,如果比当前最小距离更小,就更新最近的数;如果比当前最大距离更大,就更新最远的数。
- 结果输出:用
{gemiddelde:F2}把平均值格式化为两位小数,看起来更清晰。
如果遇到多个数距离平均值一样近(或一样远)的情况,这段代码会取数组中第一个出现的那个数,要是你需要找出所有符合条件的数,可以再调整逻辑~
内容的提问来源于stack exchange,提问作者wariscoming
相关产品推荐
相关产品推荐

