内容:
说明:
1、给定N个整数的数组
2、求mean(平均值)、median(中位值、整数数目为单时即中间数目的值,为双时即中间两个数的平均值)、mode(出现次数最多的最小数)
示例代码:
// Day0_MeanMedianandMode.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <map> #include <vector> #include <iostream> #include <algorithm> using namespace std; //by zhaocl int main() { int n; int data; vector<int> vt; double dMean = 0.0, dMedian = 0.0, dSum = 0.0; int iMode; map<int, int> mMode; int value = 1; scanf( "%d", &n ); for( int i = 0; i < n; i++ ) { scanf( "%d", &data ); vt.push_back( data ); } for( auto i : vt ) { dSum += i; } //mean dMean = dSum / n; printf( "%.1f\n", dMean ); //median sort( vt.begin(), vt.end() ); if( n % 2 == 0 ) { dSum = vt[( n / 2 ) - 1] + vt[n / 2]; dMedian = dSum / 2; } else { dMedian = vt[n / 2]; } printf( "%.1f\n", dMedian ); //mode for( int i = 0; i < n; i++ ) { if( mMode.find( vt[i] ) != mMode.end() ) //find { int value = mMode.find( vt[i] )->second; value++; mMode.erase( vt[i] ); mMode.insert( make_pair( vt[i], value ) ); } else // not find { mMode.insert( make_pair( vt[i], 1 ) ); } } vector<pair<int, int>> vValue( mMode.begin(), mMode.end() ); //order by dsc for( int i = 0; i < vValue.size(); i++ ) { if( vValue[i].second == vValue[0].second ) { if( vValue[0].first > vValue[i].first ) vValue[0].first = vValue[i].first; } } printf( "%d\n", vValue[0].first ); /* //another better method map<int, int> f; for( int e : vt ) { f[e]++; } int mode = 0; for( auto e : f ) { if( e.second > f[mode] ) { mode = e.first; } } printf( "%d\n", mode ); */ system( "pause" ); return 0; }
知识点:
1、vector、map容器排序
2、map转vector