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),常数空间。

更新于: 2024-11-13

16 次浏览

开启你的 职业生涯

完成课程并获得认证

立即开始
广告