内容:
说明:
跟上次的四分位基本类似,无非是求头尾分位之间的范围
示例代码:
#include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> using namespace std; //by zhaocl int main() { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ int T; cin >> T; vector<int> arr1( T ); vector<int> arr2( T ); vector<int> arr; for( int i = 0; i < T; i++ ) { cin >> arr1[i]; } for( int i = 0; i < T; i++ ) { cin >> arr2[i]; } for( int i = 0; i < T; i++ ) { for( int j = 0; j < arr2[i]; j++ ) { arr.push_back( arr1[i] ); } } sort( arr.begin(), arr.end() ); int N1 = 0, N2 = 0, N3 = 0; double Q1 = 0.0, Q2 = 0.0, Q3 = 0.0; int n = arr.size(); if( n % 2 == 0 ) { int m = n / 2; if( m % 2 == 0 ) { N1 = int( ( n + 1 ) * 0.25 ) - 1; Q1 = ( arr[N1] + arr[N1 + 1] ) / 2; N2 = int( ( n + 1 ) * 0.5 ) - 1; Q2 = ( arr[N2] + arr[N2 + 1] ) / 2; N3 = int( ( n + 1 ) * 0.75 ) - 1; Q3 = ( arr[N3] + arr[N3 + 1] ) / 2; } else { N1 = int( ( n + 1 ) * 0.25 ); Q1 = arr[N1]; N2 = int( ( n + 1 ) * 0.5 ) - 1; Q2 = ( arr[N2] + arr[N2 + 1] ) / 2; N3 = int( ( n + 1 ) * 0.75 ) - 1; Q3 = arr[N3]; } } else { int m = n / 2; if( m % 2 == 0 ) { N1 = int( ( n + 1 ) * 0.25 ) - 1; Q1 = ( arr[N1] + arr[N1 + 1] ) / 2; N2 = int( ( n + 1 ) * 0.5 ) - 1; Q2 = arr[N2]; N3 = int( ( n + 1 ) * 0.75 ) - 1; Q3 = ( arr[N3] + arr[N3 + 1] ) / 2; } else { N1 = int( ( n + 1 ) * 0.25 ) - 1; Q1 = arr[N1]; N2 = int( ( n + 1 ) * 0.5 ) - 1; Q2 = arr[N2]; N3 = int( ( n + 1 ) * 0.75 ) - 1; Q3 = arr[N3]; } } printf( "%.1f", Q3 - Q1 ); return 0; }
知识点:
同上一篇~