题解
【入门】求N个整数的平均数、众数和中位数
1 条题解
-
0
解题思路
排序后计算平均数和中位数,再逐个数统计出现次数得到众数。
参考代码
// 先读入题目给出的数据。 // 再按照题目要求进行计算。 // 最后按规定格式输出答案。 #include <iostream> #include <iomanip> using namespace std; int main() { int n, a[10000], sum = 0, mode, mc = 0; cin >> n; // 读入数据并计算总和。 for (int i = 0; i < n; i++) { cin >> a[i]; sum += a[i]; } // 排序后可以直接找到中位数。 for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) if (a[i] > a[j]) { int t = a[i]; a[i] = a[j]; a[j] = t; } for (int i = 0; i < n; i++) { int c = 0; for (int j = 0; j < n; j++) if (a[j] == a[i]) c++; if (c > mc) { mc = c; mode = a[i]; } } double mid = n % 2 ? a[n / 2] : (a[n / 2 - 1] + a[n / 2]) / 2.0; cout << fixed << setprecision(2) << (double)sum / n << ' ' << mode << ' ' << setprecision(1) << mid << endl; return 0; }复杂度分析
排序需要 O(n^2) 时间;其余循环按照实际遍历次数计算。代码使用固定大小数组,额外空间复杂度为 O(1) 或 O(n)。
- 1