Khi tập tạ, tôi muốn tạo một trọng lượng cụ thể bằng cách gắn một vài tấm vào một thanh.
Tôi có các tấm sau:
- 6 đĩa mỗi loại 1 kg
- 6 đĩa 2,5 kg mỗi tấm
- 6 đĩa mỗi loại 5 kg
- 6 đĩa mỗi loại 10 kg
Thanh tự nặng 10 kg.
Chỉ được phép gắn các tấm theo cặp - chúng được gắn ở mỗi đầu của thanh và sự sắp xếp ở hai đầu phải hoàn toàn đối xứng (ví dụ: gắn hai tấm 5 kg ở một đầu và một tấm 10 kg ở đầu kia bị cấm vì lý do an toàn).
Tạo một chương trình hoặc một chức năng cho tôi biết tôi phải sử dụng bao nhiêu tấm để có được tổng trọng lượng cho trước. Đầu vào là một số nguyên lớn hơn 11; đầu ra là một danh sách / mảng / chuỗi gồm 4 số. Nếu không thể kết hợp các tấm hiện có để có trọng lượng mục tiêu, hãy tạo ra một mảng 0 / trống, một chuỗi không hợp lệ, ném một ngoại lệ hoặc một số như vậy.
Nếu có một số giải pháp, mã phải chỉ xuất một (không làm cho người dùng chọn - anh ta quá bận rộn với những thứ khác).
Các trường hợp thử nghiệm:
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
Nếu mã của bạn xuất các số theo thứ tự ngược lại (từ tấm nặng sang đèn sáng), vui lòng chỉ định rõ ràng điều này để tránh nhầm lẫn.