profile
Размещено 4 года назад по предмету Информатика от normanstr

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

на решу егэ на это задание есть очень длинное решение с 60+ строками. можете, пожалуйста, помочь и написать максимально сжатое решение задания на питоне?

  1. Ответ на вопрос
    Ответ на вопрос дан pinguinbird

    Спасибо большое за интересную задачку! Получилось 32 строчки с учётом сервисных выводов и комментариями. Спрашивайте, пожалуйста, если что-то непонятно.

    from random import randint

    # инициализация переменных

    pairs = 3           # количество пар в исходном массиве (должно быть натуральным нечетным числом)

    values = [(randint(0,100), randint(0,100)) for i in range(pairs)]     # заполняем исходный массив случайными парами значений

    variations = ['0'*(pairs-len(bin(i)[2:])) + bin(i)[2:] for i in range(2**pairs)]  # зная количество пар, вычисляем все возможные варианты сумм

    summs = []          # инициализируем массив, который в дальнейшем будет содержать суммы всех вариантов вычислений

    minimal = None

    # вычисляем сумму каждого из вариантов сложения чисел (s), а также преимущество чётных или нечётных чисел в данном варианте (chk, если меньше нуля, то нечётных больше, а если больше нуля - то чётных)

    for variant in enumerate(variations):

     s = 0

     chk = 0

     for v in enumerate(variant[1]):

       value = values[v[0]][int(v[1])]

       if value%2 == 0: chk += 1

       else: chk -= 1

       s += value

     summs.append((s,chk))

    # находим минимальную сумму и записываем подробную информацию в переменную minimal

    for summ in enumerate(summs):

     if (summ[1][0]%2 == 0 and summ[1][1] > 0) or (summ[1][0]%2 != 0 and summ[1][1] < 0):

       if minimal is None: minimal = (variations[summ[0]],summ[1])

       elif summ[1][0] < minimal[1][0]: minimal = (variations[summ[0]],summ[1])

    print(values)       # исходный массив пар чисел

    print(variations)   # все варианты сложения чисел из каждой пары

    print(summs)        # все суммы на основе всех вариантов сложения чисел

    print(minimal)      # минимальная сумма с указанием варианта сложения и чётностью большинства слагаемых (<0 - больше нечетных, >0 - больше чётных)

    print('Ответ:', minimal[1][0] if minimal else 'удовлетворяющий условиям выбор невозможен')

    После удаления комментариев и сервисных выводов получаем 20 строк кода:

    from random import randint

    pairs = 3

    values = [(randint(0,100), randint(0,100)) for i in range(pairs)]

    variations = ['0'*(pairs-len(bin(i)[2:])) + bin(i)[2:] for i in range(2**pairs)]

    summs = []

    minimal = None

    for variant in enumerate(variations):

     s = 0

     chk = 0

     for v in enumerate(variant[1]):

       value = values[v[0]][int(v[1])]

       if value%2 == 0: chk += 1

       else: chk -= 1

       s += value

     summs.append((s,chk))

    for summ in enumerate(summs):

     if (summ[1][0]%2 == 0 and summ[1][1] > 0) or (summ[1][0]%2 != 0 and summ[1][1] < 0):

       if minimal is None: minimal = (variations[summ[0]],summ[1])

       elif summ[1][0] < minimal[1][0]: minimal = (variations[summ[0]],summ[1])

    print('Ответ:', minimal[1][0] if minimal else 'удовлетворяющий условиям выбор невозможен')

Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 6 лет назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса 1. укажите личное местоимение: 1) некто 2) вас 3) ни с кем 4) собой 2. укажите относительное местоимение: 1) кто-либо 2) некоторый 3) кто 4) нам 3. укажите вопросительное местоимение: 1) кем-нибудь 2) кем 3) себе 4) никакой 4. укажите определительное местоимение: 1) наш 2) который 3) некий 4) каждый 5. укажите возвратное местоимение: 1) свой 2) чей 3) сам 4) себя 6. найдите указательное местоимение: 1) твой 2) какой 3) тот 4) их 7. найдите притяжательное местоимение: 1) самый 2) моего 3) иной 4) ничей 8. укажите неопределённое местоимение: 1) весь 2) какой-нибудь 3) любой 4) этот 9. укажите вопросительное местоимение: 1) сколько 2) кое-что 3) она 4) нами 10. в каком варианте ответа выделенное слово является притяжательным местоимением? 1) увидел их 2) её нет дома 3) её тетрадь 4) их не спросили

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.