ответ: 123-45-67+89 = 100.
Объяснения:
Пусть минимальным рядом считается тот, в котором меньше слагаемых.
Для нахождения всех подходящих рядов, а так же минимального, напишем простую программу на Python.
Код:
#===============================
sequence = "123456789"
def try_seq(seq):
if len(seq) == 1:
yield seq, 0
return
variants = ["", "+", "-"]
item, rests = seq[0], try_seq(seq[1::])
for (rest, count) in rests:
for sign in variants:
yield item + sign + rest, count + (1 if sign != "" else 0)
def find_minimal(seq):
correct_sequences = list(filter(lambda x: eval(x[0]) == 100, try_seq(seq)))
correct_sequences.sort(key=lambda x: x[1])
if len(correct_sequences) == 0:
return None
return correct_sequences[0]
for i in range(1, len(sequence)):
seq = sequence[:-i]
res = find_minimal(seq)
print(seq, res)
#===============================
В данном коде обозначен генератор try_seq(), который получает на вход строку из первых 9 натуральных чисел.
В этом генераторе мы рекурсивно разбиваем строку на цифры и перебираем все возможные расстановки знаков (+, -, *нет знака*). Генератор позволяет получить все возможные комбинации без затрат на хранение самих последовательностей. На выходе из генератора получаем все возможные разбиения, которые теперь необходимо обработать.
Для обработки и выдачи минимального ряда используем функцию find_minimal(). В первую очередь нас интересуют те из них, которые в результате вычисления дают 100.
Пропускаем полученные значения через filter, сравнивая значения с 100. Оставшиеся значения сортируем по возрастанию количества разбивающих знаков в них.
Осталось только проверить подстроки от 123456789 до 1 на возможность существования ряда, дающего 100.
Для этого в цикле прогоняем подстроки через find_minimal().
Получаем, что ряд существует для 1234567, 12345678 и 123456789:
12345678 ('12+34-5+67-8', 4)
1234567 ('1+23+4+5+67', 4)
123456 None
12345 None
1234 None
123 None
12 None
1 None
Минимальная в данном случае: 1+23+4+5+67 для последовательности 1234567.
====================
Если ответ удовлетворил, не забудь отметить его как "Лучший".
Поделитесь своими знаниями, ответьте на вопрос:
8. Существует 16 логических устройств, имеющих два входа (16 логических функций от двух переменных Реализуйте их комбинационные схемы с логических элементов и, или, не
В задаче нам гарантируется, что на ввод подаются исключительно числа. При чем даже заданы ограничения с которыми они подаются, так что мы можем избавить себя от их валидации и сразу приступить к обработке.
Перво-наперво, нам необходимо получить количество чисел в последовательности. Для этого просто берем первую строку в стандартном вводе и рассматриваем её как число (1 строка кода).
Затем, нам надо получить все элементы последовательности. Но нам не обязательно работать с ними, как с числами, так как с нас не требуют математических операций. Так что просто оставляем их в виде строк (2 строка кода).
Далее, необходимо убрать все лишние значения (не оканчивающиеся на 3) и оставить только нужные. Для этого используем стандартную функцию filter, в которой проверяем последние символы строк на соответствие "3" (строка кода 3).
Осталось только посчитать количество оставшихся строк и вывести результат (строка кода 4).
Код:
N = int(input())
sequence = [input() for _ in range(N)] # Вводим числа
sequence = list(filter(lambda x: x[-1] == "3", sequence)) # Отсеиваем лишние
print(len(sequence)) # Сколько осталось?
Если ответ устроил, не забудь отметить его как "Лучший".