e-olymp 419. Задача 3n + 1

Задача

Рассмотрим следующий алгоритм генерации последовательности чисел:

Например, для [latex]n[/latex] = 22 будет сгенерирована следующая последовательность чисел:

22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

Полагают (но это еще не доказано), что этот алгоритм сойдется к [latex]n[/latex] = 1 для любого целого [latex]n[/latex]. По крайней мере, это предположение верно для всех целых [latex]n[/latex], для которых 0 < [latex]n[/latex] < 1,000,000.

Длиной цикла числа n будем называть количество сгенерированных чисел в последовательности включая 1. В приведенном примере длина цикла числа 22 равна 16.

Для двух заданных чисел [latex]i[/latex] и [latex]j[/latex] необходимо найти максимальную длину цикла среди всех чисел между [latex]i[/latex] и [latex]j[/latex] включительно.

Входные данные

Каждый тест задается в отдельной строке и содержит пару целых чисел [latex]i[/latex] и [latex]j[/latex]. Входные числа будут меньше 1000000 и больше 0. Считайте, что для вычислений достаточно использовать 32 битный целочисленный тип.

Выходные данные

Для каждой пары чисел [latex]i[/latex] и [latex]j[/latex] выведите числа [latex]i[/latex] и [latex]j[/latex] в том же порядке, в каком они поступили на вход. После чего выведите максимальную длину цикла среди всех целых чисел между [latex]i[/latex] и [latex]j[/latex] включительно. Для каждого теста три числа следует выводить в отдельной строке, разделяя одним пробелом.

Тесты

Входные данные Выходные данные
1 10
100 200
201 210
900 1000
1 10 20
100 200 125
201 210 89
900 1000 174
1 10
10 1
1 10 20
10 1 20
5 25
70 54
38 250
5 25 24
70 54 113
38 250 128

Код программы:

Решение задачи

Алгоритм, описанный в условии задачи используется для построения сиракузской последовательности. Интересный факт — какое бы число не взять, в конце получаем единицу. Нам же надо посчитать сколько раз должен сработать алгоритм для подсчитывания «длины цикла». Считывая пару чисел из потока ввода я высчитывал «длину цикла» для каждого числа из заданного введенной парой промежутка. После чего сравнивал количество итераций для каждого такого числа и находил максимальное. И так для каждой пары чисел.

Ссылки

  • Задача на сайте e-olymp
  • Код решения в Ideone

2 thoughts on “e-olymp 419. Задача 3n + 1

    • Пожалуйста, выделите код вычисления длины цикла числа в отдельную функцию.
    • Вы иногда меняете местами i и j, а иногда нет. И запоминаете это событие в специальной переменной переменной, чтобы потом вернуть их назад. А Вы не думали, что их можно просто не трогать? Просто делать цикл от минимума из двух до максимума из двух? Сделайте так, пожалуйста.
    • Сделайте что-то с объяснением там сейчас какая-то бессмысленная каша. Не делайте длинных предложений. Старайтесь не использовать уникальные, никем другим не используемые сочетания слов — это разрешено только поэтам символистам. Уверен это Ваше «пройдём числом по алгоритму» очень интересный образ, но читатель не оценит 🙂
    • Код алгоритма в условии лучше оформить так, как и код программы. Только указать язык не С++, а что-то вроде Basic.
    • Укажите категорию и метки
  1. Уже лучше.
    — По ссылке не тот код, который в статье.
    — Зачем двойная нумерация строк в коде из условия?
    — Вы начинаете it с 0, а потом увеличиваете в конце на 1. А просто начать с 1?
    — Упомяните, пожалуйста, где-то сиракузскую последовательность и/или гипотезу Коллатца.
    — УКАЖИТЕ МЕТКИ

Добавить комментарий