ให้เรากำหนดลำดับฟีโบนักชีเป็น
F(1) = 1
F(2) = 2
F(n) = F(n - 2) + F(n - 1)
ดังนั้นเราจึงมีลำดับไม่สิ้นสุด1,2,3,5,8,13,
... เป็นที่ทราบกันดีว่าเลขจำนวนเต็มบวกใด ๆ สามารถเขียนเป็นผลรวมของตัวเลขฟีโบนักชีบางส่วนได้ ข้อแม้เดียวคือการรวมนี้อาจไม่ซ้ำกัน มีอย่างน้อยหนึ่งวิธีในการเขียนตัวเลขเป็นผลรวมของตัวเลขฟีโบนักชี แต่อาจมีอีกมากมาย
ความท้าทายของคุณคือการเขียนโปรแกรมที่สมบูรณ์ซึ่งใช้ stdin จะใช้จำนวนเต็มบวกระหว่างหนึ่งถึงหนึ่งล้านรวมแล้วเอาท์พุทโดยใช้ stdout การสรุปที่เป็นไปได้ทั้งหมดของหมายเลขฟีโบนักชีซึ่งรวมถึงอินพุต ในการสรุปหมายเลขฟีโบนัชชีต้องไม่ซ้ำและรวมถึงหมายเลข1
นั้น ในการสรุปใด ๆ หาก1
มีอยู่จะต้องแสดงเพียงครั้งเดียวเท่านั้นเนื่องจากในคำจำกัดความของลำดับข้างต้น1
ปรากฏเพียงครั้งเดียว การสรุปที่มีคำศัพท์เพียงอย่างเดียวนั้นจะถูกต้องดังนั้นหากหมายเลขอินพุตคือหมายเลขฟีโบนักชีเองดังนั้นตัวเลขนั้นจึงเป็นผลรวมที่ถูกต้องและต้องพิมพ์ หากผลรวมหลายค่าระหว่างสองจำนวนใด ๆ จะต้องมีบรรทัดว่างเพื่อแยกความแตกต่างระหว่างพวกเขาได้อย่างง่ายดาย
นี่คือตัวอย่างบางส่วน
./myfib 1
1
มีเพียงผลรวมเดียวและมีคำศัพท์เพียงอย่างเดียวนั่นคือทั้งหมดที่พิมพ์ออกมา
./myfib 2
2
โปรดทราบว่านี่1+1
ไม่ใช่ผลรวมที่ถูกต้องเพราะ1
ซ้ำ
./myfib 3
1+2
3
สองจำนวนเงินและพวกเขาทั้งสองพิมพ์ด้วยบรรทัดว่างในระหว่าง
./myfib 10
2+8
2+3+5
./myfib 100
3+8+89
1+2+8+89
3+8+34+55
1+2+3+5+89
1+2+8+34+55
3+8+13+21+55
1+2+3+5+34+55
1+2+8+13+21+55
1+2+3+5+13+21+55
รหัสที่แท้จริงกอล์ฟ รหัสที่สั้นที่สุดในทุกภาษาชนะ กรุณาโพสต์รหัสของคุณด้วยกรณีทดสอบ (นอกเหนือจากที่ฉันให้ไว้ข้างต้น) ในกรณีของความสัมพันธ์ฉันเลือกหนึ่งที่มี upvotes สูงสุดหลังจากรออย่างน้อยสองสัปดาห์และอาจนานกว่านั้น ดังนั้นชุมชนโปรดอย่าลังเลที่จะแก้ไขปัญหาใด ๆ ที่คุณต้องการ ความฉลาด / ความสวยงามของรหัสมีความสำคัญมากกว่าใครโพสต์ก่อน
การเข้ารหัสที่มีความสุข!