Переберите возможные четыре исходных числа и сравните мультимножество чисел и произведений с входом. Это всего до 70 наборов при восьми элементах. Примеры 2 и 3 противоречат заявленному условию.
Определение значения D из перемешанного набора чисел
Переберите возможные четыре исходных числа и сравните мультимножество чисел и произведений с входом. Это всего до 70 наборов при восьми элементах. Примеры 2 и 3 противоречат заявленному условию.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Даны четыре разных положительных целых числа A, B, C и D, упорядоченных по возрастанию: A<B<C<D. На вход программе поступает восемь чисел в произвольном порядке: сами числа A, B, C, D и их попарные произведения AB, BC, CD, DA. Требуется написать программу, которая определит и выведет значение D.
Формат входных данных В единственной строке задаётся восемь целых чисел – перемешанный набор из A, B, C, D, AB, BC, CD, DA.
Формат выходных данных Необходимо вывести единственное число – найденное D.
Пример 1 Ввод: 2 3 4 1 12 6 2 4 Вывод: 4
Пример 2 Ввод: 2 6 7 3 14 3 15 5 Вывод: 7
Пример 3 Ввод: 1 1971 78 7644 98 27 5694 73 246 Вывод: 98
Ответ
Переберите возможные четыре исходных числа и сравните мультимножество чисел и произведений с входом. Это всего до 70 наборов при восьми элементах. Примеры 2 и 3 противоречат заявленному условию.
Кратности важны: при A = 1 некоторые произведения совпадут с исходными числами.
from collections import Counter
from itertools import combinations
def find_d(values):
if len(values) != 8 or any(x <= 0 for x in values):
raise ValueError('Expected eight positive integers')
target = Counter(values)
answers = set()
for a, b, c, d in combinations(sorted(set(values)), 4):
candidate = [a, b, c, d, a*b, b*c, c*d, d*a]
if Counter(candidate) == target:
answers.add(d)
if len(answers) != 1:
raise ValueError('Invalid or ambiguous input')
return answers.pop()
В первом примере ответ 4. Во втором заявлен D = 7, но наибольшее произведение C×D должно делиться на 7, тогда как максимум входа — 15. В третьем дано девять чисел вместо восьми. Исправлять эти примеры догадкой не нужно.