fork download
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <array>
  4. #include <random>
  5. static const int NN = 128;
  6. typedef std::array<double,NN> ArrayT;
  7.  
  8. void MakeRandomArray(ArrayT& Array){
  9. std::mt19937 MT(1);
  10. std::uniform_real_distribution<double> Dist(0,65535);
  11.  
  12. for(size_t i=0; i<Array.size();i++){
  13. Array[i] = Dist(MT);
  14. }
  15. }
  16. void MakeRandomIndexedArray(ArrayT& Array){
  17.  
  18. for(size_t i=0; i<Array.size();i++){
  19. Array[i] = i;
  20. }
  21. std::random_shuffle(Array.begin(),Array.end());
  22. }
  23.  
  24. std::pair<double,double> GetMinMax(ArrayT& Array){
  25. double Min = Array[0];
  26. double Max = Array[0];
  27.  
  28. for(size_t i=0;i<Array.size();i++){
  29. if(Min > Array[i]) Min = Array[i];
  30. if(Max < Array[i]) Max = Array[i];
  31. }
  32.  
  33. return std::pair<double,double>(Min,Max);
  34. }
  35.  
  36. double GetCenterValue(ArrayT& Array,double Center){
  37. double Dist=Center;
  38. double Value =0;
  39. double T = Dist;
  40.  
  41. for(size_t i=0;i<Array.size();i++){
  42. T = std::abs(Array[i]-Center);
  43. if(T<Dist){
  44. Dist = T;
  45. Value = Array[i];
  46. }
  47. }
  48.  
  49. return Value;
  50. }
  51.  
  52.  
  53. int main(){
  54.  
  55. ArrayT Array={0,};
  56. MakeRandomArray(Array);
  57. //MakeRandomIndexedArray(Array);
  58.  
  59. auto MM = GetMinMax(Array);
  60. double C =(MM.first+MM.second)/2.0;
  61. double V =GetCenterValue(Array,C);
  62.  
  63. std::cout<<"Min:"<<MM.first<<std::endl;
  64. std::cout<<"Max:"<<MM.second<<std::endl;
  65. std::cout<<"Center:"<<V<<" Near "<<C<<std::endl;
  66. return 0;
  67.  
  68. }
Success #stdin #stdout 0s 2888KB
stdin
Standard input is empty
stdout
Min:590.339
Max:65472.1
Center:33308 Near 33031.2