У вас 100 кошек.
Однажды вы решаете собрать всех своих кошек в гигантский круг. Изначально ни на одной из ваших кошек нет шляп. Вы проходите по кругу 100 раз, всегда начиная с одного и того же места, с первого кота (кошка № 1). Каждый раз, когда вы останавливаетесь у кошки, вы либо надеваете на нее шляпу, если на ней ее нет, либо снимаете с нее шляпу, если она есть.
- В первом раунде вы останавливаетесь у каждой кошки, надевая на каждую шляпу.
- Во втором раунде вы останавливаетесь только у каждой второй кошки (№2, №4, №6, №8 и т. д.).
- В третьем раунде вы останавливайтесь только у каждой третьей кошки (#3,#6,#9,#12 и т. д.).
- Вы продолжаете этот процесс, пока не сделаете 100 обходов вокруг кошек (например, вы посещаете только 100-ю кошку).
Вот решение
Решение №1:
def get_cats_with_hats(array_of_cats):
cats_with_hats_on = []
for num in range(1, 100 + 1):
for cat in range(1, 100 + 1):
if cat % num == 0:
if array_of_cats[cat] is True:
array_of_cats[cat] = False
else:
array_of_cats[cat] = True
for cat in range(1, 100 + 1):
if cats[cat] is True:
cats_with_hats_on.append(cat)
return cats_with_hats_on
cats = [False] * (100 + 1)
print(get_cats_with_hats(cats))
Решение № 2:
number_of_cats = 100
cats_with_hats = []
number_of_laps = 100
# We want the laps to be from 1 to 100 instead of 0 to 99
for lap in range(1, number_of_laps + 1):
for cat in range(1, number_of_cats + 1):
# Only look at cats that are divisible by the lap
if cat % lap == 0:
if cat in cats_with_hats:
cats_with_hats.remove(cat)
else:
cats_with_hats.append(cat)
print(cats_with_hats)
Подробнее здесь: https://stackoverflow.com/questions/606 ... -challenge
Мобильная версия