25.计算中值

时间:2020-07-25
本文章向大家介绍25.计算中值,主要包括25.计算中值使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一. 问题

1. 定义:中值使得一个序列中一半元素在它之前,一半元素在它之后。

2. 问题:求出一个序列的中值。

二. 思路

我们有一个序列,需要知道序列元素的个数。当有奇数个元素时,中值自然就是最中间的数字;当有偶数个元素时,需要将最中间的两个元素相加,求得的平均值就是序列的中值。

序列的元素可以是任何类型的(比如整数,浮点数等),我们需要先将这个序列排序,再进行上述运算。如果不进行排序,那么这个中值没有意义。

举个栗子:

1.有一个序列 1, 2, 3, 4, 5,包含5个元素,它的中值是3。

2.有一个序列1, 2, 3, 4, 5, 6, 包含6个元素,它的中值是中间元素3和4相加的平均值。

我们要特别注意下标的计算,因为下标从0开始。

三. 代码实现

 1 double get_mid_value(const vector<int> &values) {
 2     int total_val = values.size();
 3     double mid_value = 0.0;
 4     if (total_val % 2 == 0) {
 5         mid_value = static_cast<double>((values[total_val / 2] + values[total_val / 2 - 1])) / 2;
 6     } else {
 7         mid_value = values[total_val / 2];
 8     }
 9 
10     return mid_value;
11 }

主函数测试如下:

 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 int main() {
 7     vector<int> ages;
 8     int current_age = 0;
 9     cout << "Enter age : ";
10     while (cin >> current_age) {
11         ages.push_back(current_age);
12         cout << "Enter age : ";
13     }
14 
15     sort(ages.begin(), ages.end());
16     double mid_age = get_mid_value(ages);
17     cout << "Middle age = " << mid_age << endl;
18 
19     return 0;
20 }

代码中有几处需要说明:

1. 函数接受一个常量引用,因为它不修改序列内容。

2. 假设序列元素为整数类型,但是中值仍然有可能是浮点数,所以应该返回一个浮点类型。

3. 注意函数中对于下标的计算。

4. 代码中为了简洁没有使用模板,没有进行错误处理,但是大家应该知道这个函数应该能够处理不同种类的数据。

原文地址:https://www.cnblogs.com/Hello-Nolan/p/13378460.html