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_1
cho x_m
bạ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 = 4
chú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 = 36
và n = 15
nơi n
là 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 enumerate
theo 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
y
biểu thị tổng của mọi kết hợp. - Một số nguyên không âm
n
biể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 enumerate
hà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 n
số 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
y
vàn
bằ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
y
bằng 0,n
bằ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
y
nhỏ hơn tổng của các mệnh giá hoặcn
nhỏ 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 enumerate
chứ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.
y
nhỏ 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 = 0
nhưng y != 0
. Do đó, câu trả lời sẽ lại là {}
.