C++ 中已知数组的平均数和众数求中位数的程序
平均数、中位数和众数是描述数据集中趋势和离散程度的基本统计量。这三个量有助于理解数据的整体分布。本文将学习如何在已知 C++ 中 数组 的平均数和众数的情况下找到中位数。
问题陈述
给定一个数字数组,我们需要计算中位数,前提是在 C++ 中已知数组的平均数和众数。
示例
输入
[5, 15, 25, 35, 35, 40, 10]
平均数 = 20
众数 = 35
输出
Median = 25
暴力法
在暴力法中,我们首先对数组进行排序,然后找到中间元素来计算中位数。如果数组中的元素个数为奇数,则直接返回中间元素作为中位数;如果元素个数为偶数,则中位数为两个中间元素的平均值。
步骤
- 我们首先将数组按升序排序。
- 现在,我们检查元素个数是奇数还是偶数。
- 如果元素个数为奇数,则中间元素为中位数。
- 如果元素个数为偶数,则我们计算两个中间元素的平均值。
- 返回计算出的中位数。
代码实现
以下是上述问题陈述的代码实现
#include <bits/stdc++.h> using namespace std; // Function double calculateMedian(int arr[], int n) { sort(arr, arr + n); if (n % 2 != 0) { return arr[n / 2]; } else { return (arr[(n - 1) / 2] + arr[n / 2]) / 2.0; } } int main() { int arr[] = {5, 15, 25, 35, 35, 40, 10}; int n = 7; double median = calculateMedian(arr, n); cout << "The Median of the given dataset is: " << median << endl; return 0; }
输出
The Median of the given dataset is: 25
时间复杂度:O(n log n),因为我们对数组进行了排序。
空间复杂度:O(1),常数空间
优化方法
如果我们想找到数组的中位数,如果给定数组的平均数和众数,我们可以使用直接公式。这是查找数组中位数的最简单方法。当已知平均数和众数时,计算中位数的公式为
中位数 = (3 × 平均数 − 众数) / 2
如果给定平均数和众数,我们可以使用上述公式计算中位数。
步骤
- 我们定义一个函数来计算中位数。
- 我们将平均数和众数的值传递给此函数。
- 现在,我们使用公式计算中位数:中位数 = (3 × 平均数 − 众数) / 2
- 返回计算出的中位数。
代码实现
#include <bits/stdc++.h> using namespace std; // Function double calculateMedian(double mean, double mode) { return (3 * mean - mode) / 2; } int main() { double mean, mode; cout << "Enter the mean of the array: "; cin >> mean; cout << "Enter the mode of the array: "; cin >> mode; double median = calculateMedian(mean, mode); // Output the result cout << "The Median of the array is: " << median << endl; return 0; }
输出
Enter the mean of the array: 20 Enter the mode of the array: 35 The Median of the array is: 25
时间复杂度:O(1),常数时间。
空间复杂度:O(1),常数空间。
广告