Определение значения D из перемешанного набора чисел

Переберите возможные четыре исходных числа и сравните мультимножество чисел и произведений с входом. Это всего до 70 наборов при восьми элементах. Примеры 2 и 3 противоречат заявленному условию.

Короткий ответ

Что ответить на собеседовании

Переберите возможные четыре исходных числа и сравните мультимножество чисел и произведений с входом. Это всего до 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. В третьем дано девять чисел вместо восьми. Исправлять эти примеры догадкой не нужно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее