#include #include int avg(size_t N, int *a) { size_t i; int mean = 0, rem = 0; for (i = 0; i < N; i++) { int tmp = a[i] - mean; int ii = (int)i; mean += tmp / (ii + 1); rem += tmp % (ii + 1); if (abs(rem) > ii) { if (rem > 0) { rem -= ii + 1; mean++; } else { rem += ii + 1; mean--; } } } // округление до ближайшего целого //~ if (abs(rem) > ii / 2) //~ if (rem > 0) //~ mean++; //~ else //~ mean--; return mean; } int main(int argc, char *argv[]) { const size_t N = 88; int *a = (int *)malloc(N * sizeof(int)); size_t i; for (i = 0; i < N; i++) a[i] = rand() % 1024; printf("avg(a[]) = %d\n", avg(N, a)); free(a); return 0; }