Помогите решить задачу на питон: - Общение Python мододелов

Вопрос Помогите решить задачу на питон:

Регистрация
27 Май 2013
Сообщения
92
Репутация
0
Спасибо
0
Монет
0
Как-то раз, туманным Стокгольмским утром, Карлсон решил подкрепиться запасами варения в доме своего друга — малыша Свантесона. К счастью для Карлсона в доме его друга не оказалось никого. Голодным Карлсон оставаться был не намерен, так что решил самостоятельно найти себе еду в доме малыша Свантесона.



Взгляд Карлсона сразу же пал на n деревянных шкафов, стоящих на кухне. Он тут же догадался, что в этих шкафах спрятаны заветные запасы варенья. Карлсон с жадностью стал летать по кухне, открывать и закрывать дверцы шкафов, хватать и опустошать все банки с вареньем, которые ему удавалось найти.



И вот, все банки с вареньем пусты, Карлсон наелся и не хочет оставлять следов своего пребывания, чтобы не подводить своего друга. Каждый из шкафов имеет две дверцы: левую и правую. Карлсон помнит, что когда он примчался на кухню, левые дверцы всех шкафов были в одинаковом положении (открыты или закрыты), аналогично все правые дверцы шкафов также были в одинаковом положении (открыты или закрыты). Карлсон хочет, чтобы к моменту появления дома хозяев это условие также выполнялось. Карлсон не помнит, в каком именно положении находились все левые дверцы, также он не помнит в каком положении находились все правые дверцы. Поэтому ему неважно в каком именно положении будут все левые или правые дверцы. Главное — чтобы все левые дверцы были в одинаковом положении и все правые дверцы были в одинаковом положении. Например, все левые дверцы могут быть закрыты, а все правые — открыты.



За одну секунду Карлсон может открыть или закрыть одну дверцу какого-либо шкафа. Он понимает, что до прихода хозяев осталось очень мало времени, поэтому хочет знать минимальное количество секунд t, за которое он сможет привести дверцы всех шкафов в нужное ему положение.



Ваша задача — написать программу, которая определит искомое количество секунд t.
 
Регистрация
16 Дек 2013
Сообщения
88
Репутация
0
Спасибо
0
Монет
0
def min_time_to_close_doors(n, doors):
left_open = 0
left_closed = 0
right_open = 0
right_closed = 0

for door in doors:
if door[0] == 'O':
left_open += 1
else:
left_closed += 1

if door[1] == 'O':
right_open += 1
else:
right_closed += 1

# Для левых дверец
min_left_changes = min(left_open, left_closed)
# Для правых дверец
min_right_changes = min(right_open, right_closed)

# Общее количество изменений
total_changes = min_left_changes + min_right_changes
return total_changes

# Пример использования
n = int(input("Введите количество шкафов: "))
doors = [input("Введите состояние дверцы (например, 'OO' для открытых): ") for _ in range(n)]
result = min_time_to_close_doors(n, doors)
print("Минимальное количество секунд:", result)

Если у вас есть 3 шкафа с состояниями:

OO (обе открыты)
OC (левая открыта, правая закрыта)
CC (обе закрыты)
Ввод будет:

Code


3
OO
OC
CC
 
Регистрация
3 Фев 2013
Сообщения
68
Репутация
0
Спасибо
0
Монет
0
Так def min_seconds_to_equal_doors(n, left_states, right_states):
# Подсчет открытых и закрытых дверей
left_open = left_states.count('open')
left_closed = n - left_open
right_open = right_states.count('open')
right_closed = n - right_open

# Минимальные изменения для левых и правых дверей
min_left_changes = min(left_open, left_closed)
min_right_changes = min(right_open, right_closed)

# Общее количество изменений
total_changes = min_left_changes + min_right_changes
return total_changes

# Пример использования
n = 5 # Количество шкафов
left_states = ['open', 'open', 'closed', 'closed', 'open'] # Состояния левых дверей
right_states = ['closed', 'closed', 'open', 'closed', 'open'] # Состояния правых дверей

result = min_seconds_to_equal_doors(n, left_states, right_states)
print(f"Минимальное количество секунд: {result}")
 
Сверху Снизу