C++无法得到中值的正确答案

标签 c++ vector median

好的,所以我创建了一个程序,它接受一个 vector 并计算中位数。尽管我得到了奇数的正确中值,但偶数却没有得到相同的值。这是我的代码:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    bool check;
    cout<<"Hello World";
    vector<double> vec;

    vec.push_back(2);
    vec.push_back(6);
    vec.push_back(8);
    vec.push_back(62);

    double median;
    if(check==vec.size()%2)
    {
        median=(vec[vec.size() / 2 - 1] + vec[vec.size() / 2]) / 2;
    }
    else{
         median=vec[(vec.size() / 2.0)];
    }
    cout<<median;
    return 0;
}

所以当我在线检查时,正确答案应该是 7 但我得到了 8.. 这只发生在偶数计算时.. 我做错了什么我不明白

最佳答案

我重写了您的代码并清理了一些不必要的变量。我预先计算了数组大小 n 和中点 centerElement。您不希望专门在数组非常大的情况下重复执行此计算。

我还删除了 bool 变量 check,这是完全没有必要的。您可以通过将模运算的输出与 0

进行比较来简单地比较模运算的输出
    #include <iostream>
    #include <vector>
    using namespace std;

    int main()

{
    vector<double> vec;    
    vec.push_back(2);
    vec.push_back(6);
    vec.push_back(8);
    vec.push_back(100);
    auto n = vec.size();
    auto centerElement = n/2;

    double median;
    if(n%2 == 0)
    {
        median=(vec[centerElement - 1] + vec[centerElement]) / 2;
    }
    else{
         median=vec[(centerElement)];
    }
    cout<<median;
    return 0;
}

关于C++无法得到中值的正确答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59076186/

相关文章:

python - 将英特尔的 __attribute__((vector)) 与 swig 一起使用

c++ - 自动生成的 move 构造函数,成员不可 move

允许 HTML/CSS 输出的 C++ 日志记录库?

c++ - "not, and, or, not_eq.."是 C++ 标准的一部分吗? (以及为什么可以在代码中使用或避免使用它们?)

java - 更新数据库后刷新JTable数据

c++ - 将多个 std::vectors 复制到 1 中的更好方法? (多线程)

java - 使用选择排序查找数组的中位数

c++ - 查找 vector 中元素所有出现的索引

python - Pandas:基于列名称的列中位数

c++ - 使用 opencv 手动应用中值滤波器,与 medianBlur 函数的区别