@Andrey_Kanaev

Как посчитать значение счетчика со сбросом?

Добрый день. Есть множество чисел по порядку от 0 до 65535, после 65535 счетчик сбрасывается. каждое значение в массиве это метка времени, соответственно в нем может быть такая ситуация [..., 65022, 12, n]. Как просчитать элементы в данном массиве, что бы на выходе получилось [..., 65022, 65547, n]
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега Математика
Разработчик на С++, экс-олимпиадник.
Восстановить последовательность можно только если неурезанные числа никогда не изменяются больше чем на 65535.

Один вариант решения - прибавлять к текущему числу 65536, пока оно меньше предыдущего. Можно обойтись арифметикой:

a[i] += ceil((a[i-1]-a[i])/65536)*65536

Только проверьте, что в вашем языке ceil(-0.5) даёт 0, иначе надо отдельно проверять случай, когда последовательность возрастает в начале и прибавлять ничего не надо. И ещё, тут считается, что числа в неурезанной последовательности могут повторяться. Если нет, то надо отдельно рассмотреть случай равных чисел в итоге и ещё раз прибавить 65536.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы