Ao fazer levantamento de peso, quero fazer um peso específico, anexando várias placas a uma barra.
Eu tenho as seguintes placas:
- 6 placas de 1 kg cada
- 6 placas de 2,5 kg cada
- 6 placas de 5 kg cada
- 6 placas de 10 kg cada
A barra em si pesa 10 kg.
Só é permitido fixar as placas em pares - elas são fixadas em cada extremidade da barra e o arranjo nas duas extremidades deve ser completamente simétrico (por exemplo, fixando duas placas de 5 kg em uma extremidade e uma placa de 10 kg em a outra extremidade é proibida por razões de segurança).
Faça um programa ou uma função que me diga quantas placas de cada tipo eu tenho que usar para obter um determinado peso total. A entrada é um número inteiro maior que 11; a saída é uma lista / matriz / sequência de 4 números. Se for impossível combinar placas existentes para obter o peso desejado, produza uma matriz zero / vazia, uma sequência inválida, lance uma exceção ou algo parecido.
Se houver várias soluções, o código deverá gerar apenas uma (não faça o usuário escolher - ele está ocupado demais com outras coisas).
Casos de teste:
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
Se o seu código exibir os números na ordem oposta (da placa pesada para a leve), especifique isso explicitamente para evitar confusão.