zoukankan      html  css  js  c++  java
  • 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. 代码中为了简洁没有使用模板,没有进行错误处理,但是大家应该知道这个函数应该能够处理不同种类的数据。

  • 相关阅读:
    如何将网格式报表打印成其它样式
    拥有与实力不相称的脾气是种灾难——北漂18年(23)
    8.8.1 Optimizing Queries with EXPLAIN
    mysql 没有rowid 怎么实现根据rowid回表呢?
    secondary index
    8.5.5 Bulk Data Loading for InnoDB Tables 批量数据加载
    mysql 中key 指的是索引
    8.5.4 Optimizing InnoDB Redo Logging 优化InnoDB Redo 日志
    8.5.3 Optimizing InnoDB Read-Only Transactions 优化InnoDB 只读事务
    8.5.1 Optimizing Storage Layout for InnoDB Tables InnoDB表的存储布局优化
  • 原文地址:https://www.cnblogs.com/Hello-Nolan/p/13378460.html
Copyright © 2011-2022 走看看