Время выполнения
20 минут
Уровень сложности
Средний
Цели
Ознакомить учащегося с:
- использованием цикла
while
; - преобразованием устно определенных циклов в реальный код Python.
Сценарий
В 1937 году немецкий математик Лотар Коллатц сформулировал интригующую гипотезу (она до сих пор не доказана), которую можно описать следующим образом:
- возьмите любое неотрицательное и ненулевое целое число и назовите его
c0
; - если оно четное, вычислите новое
c0
какc0 ÷ 2
; - в противном случае, если оно нечетное, высислите новое
c0
как3 × c0 + 1
; - если
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