ปัญหาการเปลี่ยนแปลงเหรียญเป็นเอกสารที่ดีมาก ได้รับการจัดหาที่ไม่มีที่สิ้นสุดของเหรียญ ได้แก่x_1การที่คุณต้องพบจำนวนรวมกันซึ่งเพิ่มขึ้นถึงx_m yตัวอย่างเช่นที่กำหนดx = {1,2,3}และy = 4เรามีชุดค่าผสมสี่แบบ:
{1,1,1,1}{1,1,2}{1,3}{2,2}
บทนำ
ปัญหาการเปลี่ยนเหรียญมีหลายรูปแบบ ในรูปแบบนี้เรามีข้อ จำกัด เพิ่มเติมสองประการ:
- ทุกนิกายจะต้องใช้อย่างน้อยหนึ่งครั้ง
- จำนวนเหรียญที่แน่นอนต้องถูกนำมาใช้ทั้งหมด
ตัวอย่างเช่นกำหนดx = {1,2,3}, y = 36และn = 15ที่nคือจำนวนของเหรียญที่จะต้องใช้เราได้รับสี่ชุดที่:
{1,2,2,2,2,2,2,2,3,3,3,3,3,3,3}(1 รายการ, 7 twos, 7 threes){1,1,2,2,2,2,2,3,3,3,3,3,3,3,3}(2 อัน, 5 twos, 8 threes){1,1,1,2,2,2,3,3,3,3,3,3,3,3,3}(3 รายการ, 3 twos, 9 threes){1,1,1,1,2,3,3,3,3,3,3,3,3,3,3}(4 รายการ 1 twos, 10 threes)
ท้าทาย
ความท้าทายคือการเขียนฟังก์ชั่นenumerateในภาษาที่คุณเลือกซึ่งจะระบุชุดค่าผสมทั้งหมดตามที่อธิบายไว้ข้างต้น:
- รายการของนิกาย
{1,5,10,25}เช่น คุณสามารถใช้รายการหรืออาร์เรย์ - จำนวนเต็มที่ไม่เป็นลบ
yที่แสดงผลรวมของทุกชุดค่าผสม - จำนวนเต็มที่ไม่เป็นลบ
nที่ระบุจำนวนเหรียญทั้งหมด
ลำดับของข้อโต้แย้งไม่สำคัญ อนุญาตให้ใช้ฟังก์ชั่น Pointfree
ผลลัพธ์ของenumerateฟังก์ชันจะต้องเป็นรายการของชุดค่าผสม ชุดค่าผสมแต่ละชุดต้องไม่ซ้ำกันและต้องเป็นรายการnจำนวนเต็มที่รวมyกัน ทุกประเภทจะต้องปรากฏอย่างน้อยหนึ่งครั้งในแต่ละชุดค่าผสมและจะต้องไม่หายไป การเรียงลำดับของจำนวนเต็มและชุดค่าผสมนั้นไม่สำคัญ คุณสามารถใช้รายการหรืออาร์เรย์สำหรับเอาต์พุต
โปรดจำไว้ว่ากรณีขอบต่อไปนี้:
- หากทั้งสอง
yและnเป็นศูนย์และรายการของนิกายว่างเปล่าเอาท์พุทเป็นรายการของการรวมกันหนึ่งชุดที่ว่างเปล่า (เช่น{{}}) - มิฉะนั้นถ้า
yเป็นศูนย์จะมีค่าnเป็นศูนย์หรือรายการของสกุลเงินว่างเปล่าผลลัพธ์คือรายการของการรวมศูนย์ (เช่น{}) - โดยทั่วไปถ้า
yน้อยกว่าผลรวมของหน่วยหรือnน้อยกว่าจำนวนหน่วยดังนั้นเอาต์พุตคือรายการของชุดค่าผสมศูนย์
การให้คะแนนจะขึ้นอยู่กับขนาดของโปรแกรมทั้งหมดในหน่วยไบต์ โปรดทราบว่าสิ่งนี้รวมถึงenumerateฟังก์ชั่นฟังก์ชั่นผู้ช่วยคำสั่งนำเข้าและอื่น ๆ มันไม่รวมกรณีทดสอบ
yน้อยกว่าผลรวมของนิกายนั้นในบางจุดในโซลูชันแบบเรียกซ้ำของคุณคุณจะไปถึงกรณีพื้นฐานที่รายการของนิกายว่างเปล่า ดังนั้นคำตอบจะเป็น{}(เช่นไม่พบวิธีแก้ไข) ถ้าnเป็นน้อยกว่าจำนวนของนิกายแล้วในที่สุดคุณจะถึงกรณีฐานที่แต่n = 0 ดังนั้นคำตอบอีกครั้งจะเป็นy != 0 {}