Các vấn đề thay đổi xu là rất tốt tài liệu. Cung cấp vô số tiền có mệnh giá x_1cho x_mbạn cần tìm số lượng kết hợp cộng lại y. Ví dụ: đã cho x = {1,2,3}và y = 4chúng tôi có bốn kết hợp:
{1,1,1,1}{1,1,2}{1,3}{2,2}
Giới thiệu
Có một số biến thể của vấn đề thay đổi tiền xu. Trong biến thể này, chúng tôi có hai hạn chế bổ sung:
- Mỗi mệnh giá phải được sử dụng ít nhất một lần.
- Chính xác một số lượng tiền cố định phải được sử dụng trong tổng số.
Ví dụ, đưa ra x = {1,2,3}, y = 36và n = 15nơi nlà tổng số tiền phải được sử dụng, chúng tôi nhận được bốn kết hợp:
{1,2,2,2,2,2,2,2,3,3,3,3,3,3,3}(1 cái, 7 twos, 7 threes){1,1,2,2,2,2,2,3,3,3,3,3,3,3,3}(2 cái, 5 twos, 8 threes){1,1,1,2,2,2,3,3,3,3,3,3,3,3,3}(3 cái, 3 twos, 9 threes){1,1,1,1,2,3,3,3,3,3,3,3,3,3,3}(4 cái, 1 twos, 10 threes)
Thử thách
Thách thức là viết một hàm enumeratetheo ngôn ngữ bạn chọn, liệt kê tất cả các kết hợp như được mô tả ở trên:
- Danh sách mệnh giá. Ví dụ
{1,5,10,25}. Bạn có thể sử dụng danh sách hoặc mảng. - Một số nguyên không âm
ybiểu thị tổng của mọi kết hợp. - Một số nguyên không âm
nbiểu thị tổng số xu.
Thứ tự của các đối số không quan trọng. Chức năng Pointfree được cho phép.
Đầu ra của enumeratehàm phải là một danh sách kết hợp. Mỗi kết hợp phải là duy nhất và nó phải là một danh sách các nsố nguyên cộng lại y. Mỗi mệnh giá phải xuất hiện ít nhất một lần trong mỗi kết hợp và không được kết hợp. Thứ tự của các số nguyên và các kết hợp không thành vấn đề. Bạn có thể sử dụng danh sách hoặc mảng cho đầu ra.
Hãy ghi nhớ các trường hợp cạnh sau:
- Nếu cả hai
yvànbằng 0 và danh sách các mệnh giá đều trống thì đầu ra là danh sách của một kết hợp, kết hợp trống (nghĩa là{{}}). - Mặt khác, nếu
ybằng 0,nbằng 0 hoặc danh sách các mệnh giá trống thì đầu ra là danh sách các tổ hợp số không (nghĩa là{}). - Tổng quát hơn, nếu
ynhỏ hơn tổng của các mệnh giá hoặcnnhỏ hơn số mệnh giá thì đầu ra là một danh sách các kết hợp bằng không.
Ghi điểm sẽ dựa trên kích thước của toàn bộ chương trình theo byte. Lưu ý rằng điều này bao gồm enumeratechức năng, chức năng của trình trợ giúp, báo cáo nhập, v.v. Nó không bao gồm các trường hợp kiểm tra.
ynhỏ hơn tổng của các mệnh giá thì đến một lúc nào đó trong giải pháp đệ quy của bạn, bạn sẽ đạt được trường hợp cơ sở nơi danh sách các mệnh giá trống. Do đó, câu trả lời sẽ là {}(tức là không tìm thấy giải pháp). Nếu nít hơn số mệnh giá thì cuối cùng bạn sẽ đạt được trường hợp cơ bản n = 0nhưng y != 0. Do đó, câu trả lời sẽ lại là {}.