Problem #57
Tags:
arithmetic
loops
floating-point
c-0
simple
digital-signal-processing
Маленький Мерлин хочет стать метеорологом. Он измеряет температуру воздуха каждый час, так что через несколько дней получается длинная последовательность значений.
Однако инструменты его несовершенны и измерения не вполне точны - они "скачут" вверх и вниз на несколько градусов от реальных значений.
Обнаружив это, Мерлин решил "сгладить" данные. Чтобы достичь этого, каждое значение нужно заменить средним от трех -
его самого и двух соседних (предыдущего и следующего). Например, если у нас последовательность из 5
значений:
3 5 6 4 5
То второе (5
) должно быть заменено на (3 + 5 + 6) / 3 = 4.66666666667
,
а третье (6
) заменяется на (5 + 6 + 4) / 3 = 5
,
четвертое же (4
) заменим на (6 + 4 + 5) / 3 = 5
.
Договоримся также что первое и последнее значения мы не меняем вовсе.
На картинке выше синяя линия изображает необработанные результаты измерений, а красная - данные после сглаживания.
От нас требуется написать программу которая поможет малышу Мерлину с его хитроумным алгоритмом цифровой обработки сигнала.
Входные данные указывают длину последовательности в первой строке.
Вторая строка содержит результаты измерений (значения последовательности).
Ответ должен содержать "сглаженную" последовательность. Значения нужно сосчитать с точностью 1e-7
или лучше.
Пример:
входные данные:
7
32.6 31.2 35.2 37.4 44.9 42.1 44.1
ответ:
32.6 33 34.6 39.1666666667 41.4666666667 43.7 44.1