Skip to content

Instantly share code, notes, and snippets.

@Martinfx
Last active February 14, 2018 21:21
Show Gist options
  • Save Martinfx/c774cbc799e2a01b3d0a6faec63e66d2 to your computer and use it in GitHub Desktop.
Save Martinfx/c774cbc799e2a01b3d0a6faec63e66d2 to your computer and use it in GitHub Desktop.
mean, median, mode
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
double mean(std::vector<double> mean)
{
double m_mean;
for(unsigned int i = 0; i < mean.size(); ++i)
{
m_mean += mean[i];
}
return m_mean / mean.size();
}
double median(std::vector<double> &median)
{
double m_median = 0.0;
std::sort(median.begin(), median.begin() + median.size());
m_median = median[(median.size() / 2 ) - 1] + median[(median.size() / 2 )];
if(median.size() % 2 == 0)
{
return (median[(median.size() / 2 ) - 1] + median[(median.size() / 2 )]) / 2.0;
}
return median[(median.size() / 2) - 1];
}
double mode(std::vector<double> mode)
{
std::map<double, int> m_numbers;
for(unsigned int i = 0; i < mode.size(); ++i)
{
m_numbers.insert(std::pair<double, int>(mode[i], 0));
if(mode[i])
{
m_numbers.at(mode[i]) += 1;
}
}
auto x = std::max_element(m_numbers.begin(), m_numbers.end(),
[](const pair<int, int>& p1, const pair<int, int>& p2) {
return p1.second < p2.second; });
return x->first;
}
int main() {
int n = 0;
std::vector<double> num;
cin >> n;
for(int i = 0; i < n; ++i)
{
int numbers = 0;
cin >> numbers;
num.push_back(numbers);
}
std::cout << mean(num) << std::endl;
std::cout << median(num) << std::endl;
std::cout << mode(num) << std::endl;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment