При выполнении тяжелой атлетики я хочу сделать определенный вес, прикрепив несколько пластин к штанге.
У меня есть следующие пластины:
- 6 тарелок по 1 кг каждая
- 6 тарелок по 2,5 кг каждая
- 6 тарелок по 5 кг каждая
- 6 тарелок по 10 кг каждая
Сам бар весит 10 кг.
Допускается прикреплять пластины только парами - они крепятся на каждом конце стержня, а расположение на двух концах должно быть полностью симметричным (например, прикрепление двух 5-килограммовых плит на одном конце и одной 10-килограммовой плиты в другой конец запрещен по соображениям безопасности).
Сделайте программу или функцию, которая скажет мне, сколько пластин каждого вида я должен использовать, чтобы получить данный общий вес. Ввод целого числа больше 11; на выходе получается список / массив / строка из 4 чисел. Если невозможно объединить существующие пластины, чтобы получить целевой вес, выведите массив нулевой / пустой, недопустимую строку, сгенерируйте исключение или что-то подобное.
Если есть несколько решений, код должен выводить только одно (не заставляйте пользователя выбирать - он слишком занят другими вещами).
Тестовые случаи:
12 -> [2 0 0 0] - 2 plates of 1 kg plus the bar of 10 kg
13 -> [0 0 0 0] - a special-case output that means "impossible"
20 -> [0 0 2 0] - 2 plates of 5 kg + bar
20 -> [0 4 0 0] - a different acceptable solution for the above
21 -> [6 2 0 0] - 6 plates of 1 kg + 2 plates of 2.5 kg + bar
28 -> [0 0 0 0] - impossible
45 -> [0 2 6 0] - a solution for a random number in range
112 -> [2 4 6 6] - a solution for a random number in range
121 -> [6 6 6 6] - maximal weight for which a solution is possible
Если ваш код выводит числа в обратном порядке (от тяжелой до легкой), укажите это явно, чтобы избежать путаницы.