Module (40%)
Section (88%)
Лабораторная работа

Время выполнения

20 минут

Уровень сложности

Средний

Цели

Ознакомить учащегося с:

  • использованием цикла while;
  • преобразованием устно определенных циклов в реальный код Python.

Сценарий

В 1937 году немецкий математик Лотар Коллатц сформулировал интригующую гипотезу (она до сих пор не доказана), которую можно описать следующим образом:

  1. возьмите любое неотрицательное и ненулевое целое число и назовите его c0;
  2. если оно четное, вычислите новое c0 как c0 ÷ 2;
  3. в противном случае, если оно нечетное, высислите новое c0 как 3 × c0 + 1;
  4. если c0 ≠ 1, вернитесь к пункту 2.

Гипотеза гласит, что независимо от начального значения c0 оно всегда будет равно 1.

Конечно, использование компьютера для доказательства гипотезы для любого натурального числа - чрезвычайно сложная задача (для этого может потребоваться даже искусственный интеллект), но вы можете использовать Python для проверки некоторых отдельных чисел. Может быть, Вы даже найдете то, которое опровергнет гипотезу.


Напишите программу, которая считывает одно натуральное число и выполняет указанные выше шаги до тех пор, пока c0 остается отличным от 1. Мы также хотим, чтобы вы подсчитали шаги, необходимые для достижения цели. Ваш код также должен выводить все промежуточные значения c0.

Подсказка: самая важная часть проблемы - как преобразовать идею Коллатца в цикл while - это ключ к успеху.

Протестируйте свой код, используя предоставленные нами данные.

Тестовые данные


Примерный ввод: 15

Ожидаемый вывод:

46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1 steps = 17

Примерный ввод: 16

Ожидаемый вывод:

8 4 2 1 steps = 4

Примерный ввод: 1023

Ожидаемый вывод:

3070 1535 4606 2303 6910 3455 10366 5183 15550 7775 23326 11663 34990 17495 52486 26243 78730 39365 118096 59048 29524 14762 7381 22144 11072 5536 2768 1384 692 346 173 520 260 130 65 196 98 49 148 74 37 112 56 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 steps = 62

Code

{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×