UniLecs #153. Джентльмены удачи

UniLecs #153. Джентльмены удачи

UniLecs

Задача: воры Хмырь и Косой украли 3 цельных куска цветного металла. Каждый кусок весит a, b, c грамм соот-но. Помогите им поделить куски поровну. Если куски не делятся ровно по кол-ву грамм, то они успеют распилить только 1 из кусков на 2 доли, иначе они рискуют быть схваченными.

Входные данные: a, b, c - вес кусков в граммах, сумма весов кусков четна. (a, b, c - натуральные числа от 1 до 10^6).

Вывод:

1. Если не получается поделить куски поровну, то выводите сообщение : "Мы сдаемся".

2. Если куски делятся поровну без распила, то вывести сообщение: "Пилить не надо, разбегаемся."

3. Если все таки без распила не обойтись, то вывести номер распиливаемого куска, а также веса долей, на ктр вы распилили кусок. Если вариантов распила несколько, выводите любой из них.

Пример:

1. a = 2, b = 1, c = 1

Answer = "Пилить не надо, разбегаемся."

2. a = 2, b = 3, c = 3

Answer = "2й кусок. 1-я доля = 2, 2-я доля = 1"

Идея: первое что проверим, можно ли поделить куски без распиливания. 

Т.е. проверяем выполняется ли одно из следующих равенств:

a + b = c, b + c = a либо a + c = b.

Если ни одно из равенств не выполняется, то будем пилить один из кусков.

Так как по условию задачи сумма весов кусков четная, то эта сумма нацело делится пополам.

half = (a + b + c) / 2.

Теперь нужно определить какой кусок и на какие доли необходимо поделить.

1. Если a > half, то делим кусок a на след.доли: half, a - half.

1й случай: a > half


2. Если a < half < a + b, то делим кусок b на след.доли: half - a, a + b - half

2й случай: a < half < a + b


3. Если a + b < half, то делим кусок c на доли: half - a - b, half

a + b < half

Реализация:

C#

https://gist.github.com/unilecs/d449101aecb57b460e5f9536dcfa87ac

Test: https://dotnetfiddle.net/hW43N4

Report Page