9. Бинарный поиск_Практика-3

☰ Теория

Задание можно решать по разному:

  1. Метод моделирования - реализовать последовательность и развернуть её требуемую глубину
    (от такого способа нас предостеригают в пояснении к условию)
  2. Аналитически - определить формулу N-го члена и вычислить. 
    (это вполне рабочий метод, но как его реализовать)
  3. "Практический" - что-то среднее между 1 и 2. При реализации воспользуемся  "восходящим" бинарным поиском по ответу.
Построение последовательности состоит из серий: 
  • добавили 1 нечетный
  • добавили 2 четных
  • добавили 3 четных
  • и т.д.
Пусть k-я серия состоит из Ak1, ..., Akk - тогда очевидно, что Akk = Ak1 + 2*(k-1)
А если учесть, что Ak1 = Ak-1k-1 + 1. Таким образом Akk = Ak-1k-1 + 2(k-1) + 1
Это дает следующие ответы:
  • номер элемента Akk равен 1 + 2...+ л = л(л+1)/2
  • значение элемент Akk равно (2*1 -1) +(2*2 - 1) + ... + (2*k -1) = k2
Теперь ясно, как находить  N-й элемент
  1. Найти сколько "полных" серий до номера N и значение последнего элемента 
  2. Определить номер элемента в серии и добавить необходимое значение
Для поиска числа полных серий можно (полезно в качестве тренировки)
  • определить границы интервала "восходящим способом)
    (  while (f(R) <= N) { R*=2;} L = R/2; )
  • бинарным поиском найти точное число серий,  

Задача Чет-нечет
Дана возрастающая последовательность целых чисел 1, 2, 4, 5, 7, 9, 10, 12, 14, 16, 17, ...
Она сформирована следующим образом: берется одно нечетное число, затем два четных, затем три нечетных и так далее.
Выведите N-й элемент этой последовательности.
Программа должна работать быстрее, чем за линейный поиск
 
Входные данные
Одно целое число N (1 <= N <= 109).
 
Выходные данные
Выведите одно целое число - N-й элемент последовательности.
 
Ввод
Вывод
1
1
4
5

Пояснения к решению см. в теории

 
 
 

Напишите программу
Auto
       

time 500 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++2
Python3
Комментарий учителя