#include <algorithm>
#include <numeric>
#include <iostream>
#include <cmath>
int main()
{
float values[] = { 1, 2, 3, 4, 5 };
const int numValues = sizeof(values) / sizeof(float);
// get the average
float average = std::accumulate(values, values + numValues, 0.0F) / numValues;
// sort the values
std::sort(values, values + numValues);
// find where the average would be inserted
float *closest = std::upper_bound(values, values + numValues, average);
// assume closest is the value greater than average
float *absClosest = closest;
// check number before the insertion point
if (closest != values)
{
float *closest2 = closest - 1;
// get the difference in both numbers and average
if (fabs(*closest2 - average) < fabs(*closest - average))
absClosest = closest2;
}
std::cout << "The average is " << average << "\nThe closest to average is " << *absClosest;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPG51bWVyaWM+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGNtYXRoPgoKaW50IG1haW4oKQp7CiAgICBmbG9hdCB2YWx1ZXNbXSA9IHsgMSwgMiwgMywgNCwgNSB9OwogICAgY29uc3QgaW50IG51bVZhbHVlcyA9IHNpemVvZih2YWx1ZXMpIC8gc2l6ZW9mKGZsb2F0KTsKCiAgICAvLyBnZXQgdGhlIGF2ZXJhZ2UKICAgIGZsb2F0IGF2ZXJhZ2UgPSBzdGQ6OmFjY3VtdWxhdGUodmFsdWVzLCB2YWx1ZXMgKyBudW1WYWx1ZXMsIDAuMEYpIC8gbnVtVmFsdWVzOwoKICAgIC8vIHNvcnQgdGhlIHZhbHVlcwogICAgc3RkOjpzb3J0KHZhbHVlcywgdmFsdWVzICsgbnVtVmFsdWVzKTsKCiAgICAvLyBmaW5kIHdoZXJlIHRoZSBhdmVyYWdlIHdvdWxkIGJlIGluc2VydGVkIAogICAgZmxvYXQgKmNsb3Nlc3QgPSBzdGQ6OnVwcGVyX2JvdW5kKHZhbHVlcywgdmFsdWVzICsgbnVtVmFsdWVzLCBhdmVyYWdlKTsKCiAgICAvLyBhc3N1bWUgY2xvc2VzdCBpcyB0aGUgdmFsdWUgZ3JlYXRlciB0aGFuIGF2ZXJhZ2UKICAgIGZsb2F0ICphYnNDbG9zZXN0ID0gY2xvc2VzdDsKCiAgICAvLyBjaGVjayBudW1iZXIgYmVmb3JlIHRoZSBpbnNlcnRpb24gcG9pbnQKICAgIGlmIChjbG9zZXN0ICE9IHZhbHVlcykKICAgIHsKICAgICAgICBmbG9hdCAqY2xvc2VzdDIgPSBjbG9zZXN0IC0gMTsKCiAgICAgICAgLy8gZ2V0IHRoZSBkaWZmZXJlbmNlIGluIGJvdGggbnVtYmVycyBhbmQgYXZlcmFnZQogICAgICAgIGlmIChmYWJzKCpjbG9zZXN0MiAtIGF2ZXJhZ2UpIDwgZmFicygqY2xvc2VzdCAtIGF2ZXJhZ2UpKQogICAgICAgICAgICBhYnNDbG9zZXN0ID0gY2xvc2VzdDI7CiAgICB9CiAgICBzdGQ6OmNvdXQgPDwgIlRoZSBhdmVyYWdlIGlzICIgPDwgYXZlcmFnZSA8PCAiXG5UaGUgY2xvc2VzdCB0byBhdmVyYWdlIGlzICIgPDwgKmFic0Nsb3Nlc3Q7Cn0K