Lorsque je fais de l'haltérophilie, je veux faire un poids spécifique en attachant plusieurs plaques à une barre.
J'ai les plaques suivantes:
- 6 assiettes de 1 kg chacune
- 6 assiettes de 2,5 kg chacune
- 6 assiettes de 5 kg chacune
- 6 assiettes de 10 kg chacune
La barre elle-même pèse 10 kg.
Il est uniquement permis de fixer les plaques par paires - elles sont fixées à chaque extrémité de la barre, et la disposition aux deux extrémités doit être complètement symétrique (par exemple, en fixant deux plaques de 5 kg à une extrémité et une plaque de 10 kg à l'autre extrémité est interdite pour des raisons de sécurité).
Faites un programme ou une fonction qui me dit combien de plaques de chaque type je dois utiliser pour obtenir un poids total donné. L'entrée est un entier supérieur à 11; la sortie est une liste / tableau / chaîne de 4 nombres. S'il est impossible de combiner des plaques existantes pour obtenir le poids cible, sortez un tableau zéro / vide, une chaîne invalide, lancez une exception ou une telle.
S'il existe plusieurs solutions, le code ne doit en générer qu'une seule (ne faites pas choisir l'utilisateur - il est trop occupé par d'autres choses).
Cas de test:
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
Si votre code sort les nombres dans l'ordre inverse (de la plaque lourde à la plaque légère), veuillez le spécifier explicitement pour éviter toute confusion.