Определите минимально возможную сумму всех чисел в третьей группе.
Условие
Набор данных состоит из троек натуральных чисел. Необходимо распределить все числа на три группы, при этом в каждую группу должно попасть ровно одно число из каждой исходной тройки. Сумма всех чисел в первой группе должна быть чётной, во второй — нечётной. Определите минимально возможную сумму всех чисел в третьей группе. Входные данные.
Файл AФайл BПервая строка входного файла содержит число N — общее количество троек в наборе. Каждая из следующих N строк содержит три натуральных числа, не превышающих 10 000.Пример входного файла:31 2 38 12 46 9 7Для указанных данных искомая сумма равна 11, она соответствует такому распределению чисел по группам: (2, 8, 7), (3, 12, 9), (1, 4, 6).Вам даны два входных файла (A и B), каждый из которых имеет описанную выше структуру. В ответе укажите два числа: сначала значение искомой суммы для файла A, затем для файла B. Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго. Ответ:
Ответ
Ответ и полный разбор откроются после входа
Посмотреть ответРешение по шагам
Как рассуждать
Решение. Последовательно считывая данные из файла, будем прибавлять к первой сумме (переменная sumAns) минимальное число в тройке, к третьей сумме (переменная sum3) минимальное число в тройке, а ко второй сумме (переменная sum2) оставшееся число в тройке. Также в переменную minDif будем записывать значение минимальной нечётной разницы между между числами, накапливаемыми в первой сумме, и одним из чисел, накапливаемых в других суммах. Таким образом, если в переменных sum2 и sum3 по окончании работы программы одновременно будут два нечётных числа или два чётных числа, будем прибавлять к искомой сумме значение переменной minDif. Приведём решение задачи на языке Pascal.var x, y, z: integer;n: integer;sumAns, sum2, sum3: integer;minDif: integer;f: text;begin assign(f,'C:\27-B.txt'); reset(f); readln(f, n); sumAns := 0; sum2 := 0; sum3 := 0; minDif := 20001; while not eof(f) do begin readln(f, x, y, z); if (x <= y) and (x <= z) then begin sumAns := sumAns + x; if (y <= z) then begin sum2 := sum2 + y; sum3 := sum3 + z; end else begin sum3 := sum3 + y; sum2 := sum2 + z; end; if (((abs(x - y)) mod 2 <>
Осталось ещё 13 шагов
and (abs(x - y) < minDif)) then minDif :=…
and (abs(x - z) < minDif)) then minDif :=…
and (abs(y - x) < minDif)) then minDif :=…
and (abs(y - z) < minDif)) then minDif :=…
and (abs(z - y) < minDif)) then minDif :=…
and (abs(z - x) < minDif)) then minDif :=…
Примечание. Путь к файлу необходимо указать…
and (abs(x - y) < minDif): minDif = abs(x…
and (abs(x - z) < minDif): minDif = abs(x…
and (abs(y - x) < minDif): minDif = abs(y…
and (abs(y - z) < minDif): minDif = abs(y…
and (abs(z - y) < minDif): minDif = abs(z…
and (abs(z - x) < minDif): minDif = abs(z…
Бесплатно · займёт минуту