В радиологической лаборатории во время экспериментов используются защитные свинцовые экраны. В зависимости от расстояния, на которое излучение может проникнуть в материал (проникающей способности), подбирается экран из одной или нескольких свинцовых пластин толщиной от 1 до 100 сантиметров. В лаборатории есть семь пластин толщиной 29, 41, 1, 2, 16, 8, 3 сантиметра. В сумме они дают ровно 100
сантиметров. Сотрудники планируют провести эксперимент с новым видом излучения, проникающая способность которого неизвестна, то есть им необходимо собрать из имеющихся пластин экран некоторой толщины от 1 до 100
python
plastins = [29, 41, 1, 2, 16, 8, 3]
Затем, напишем функцию, которая будет искать комбинации пластин, дающие нужную толщину. Функция будет рекурсивной и будет вызывать саму себя с измененными параметрами:
python
def find_combination(target, current_sum, current_combination, all_combinations):
if current_sum == target: # если текущая сумма равна целевой толщине
all_combinations.append(current_combination) # добавляем текущую комбинацию в список всех комбинаций
elif current_sum < target: # если текущая сумма меньше целевой толщины
for i in range(len(plastins)): # перебираем все пластины
new_combination = current_combination + [plastins[i]] # создаем новую комбинацию
new_sum = current_sum + plastins[i] # обновляем текущую сумму
find_combination(target, new_sum, new_combination, all_combinations) # вызываем функцию рекурсивно
Далее, создадим список, в который будем записывать все найденные комбинации пластин:
python
all_combinations = []
Затем, вызовем функцию для поиска комбинаций и передадим в неё нужные параметры:
python
find_combination(100, 0, [], all_combinations)
После выполнения кода, в списке `all_combinations` будут храниться все возможные комбинации пластин, дающие толщину 100 сантиметров.
Выведем все найденные комбинации на экран:
python
for combination in all_combinations:
print(combination)
Таким образом, полный код для решения данной задачи будет выглядеть следующим образом:
python
plastins = [29, 41, 1, 2, 16, 8, 3]
def find_combination(target, current_sum, current_combination, all_combinations):
if current_sum == target:
all_combinations.append(current_combination)
elif current_sum < target:
for i in range(len(plastins)):
new_combination = current_combination + [plastins[i]]
new_sum = current_sum + plastins[i]
find_combination(target, new_sum, new_combination, all_combinations)
all_combinations = []
find_combination(100, 0, [], all_combinations)
for combination in all_combinations:
print(combination)
Таким образом, мы получим все возможные комбинации пластин, дающие нужную толщину 100 сантиметров.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет