Hãy để chúng tôi xác định chuỗi Fibonacci là
F(1) = 1
F(2) = 2
F(n) = F(n - 2) + F(n - 1)
Vì vậy, chúng ta có chuỗi vô hạn 1,2,3,5,8,13,
... Người ta biết rằng bất kỳ số nguyên dương nào cũng có thể được viết dưới dạng tổng của một số số Fibonacci. Nhắc nhở duy nhất là tổng kết này có thể không phải là duy nhất. Luôn có ít nhất một cách để viết một số dưới dạng tổng của các số Fibonacci nhưng có thể có nhiều số khác nữa.
Thử thách của bạn là viết một chương trình hoàn chỉnh, sử dụng stdin sẽ lấy một số nguyên dương từ một đến một triệu bao gồm, và sau đó xuất ra bằng cách sử dụng tất cả các phép tính tổng của các số Fibonacci có thể tổng hợp với đầu vào. Trong một tổng kết, các số Fibonacci không được lặp lại và bao gồm số đó 1
. Trong bất kỳ tổng kết nào, nếu 1
có mặt, nó chỉ phải hiện diện một lần vì trong định nghĩa của tôi về trình tự trên 1
chỉ xuất hiện một lần. Các tóm tắt chỉ có thuật ngữ là hợp lệ, do đó, nếu số đầu vào là một số Fibonacci, thì chính số đó là một tổng hợp hợp lệ và phải được in. Nếu nhiều khoản tiền, thì giữa hai khoản tiền bất kỳ phải có một dòng trống để dễ dàng phân biệt giữa chúng.
Dưới đây là một số mẫu.
./myfib 1
1
Chỉ có một số tiền như vậy và nó chỉ có thời hạn nên đó là tất cả những gì được in.
./myfib 2
2
Lưu ý ở đây 1+1
không phải là một khoản tiền hợp lệ vì 1
lặp lại.
./myfib 3
1+2
3
Hai khoản tiền và cả hai đều được in với một dòng trống ở giữa.
./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
Đúng mã golf. Mã ngắn nhất trong bất kỳ ngôn ngữ nào sẽ thắng. Vui lòng gửi mã của bạn với một số trường hợp thử nghiệm (ngoài trường hợp tôi đã đưa ra ở trên). Trong trường hợp quan hệ, tôi chọn một người có mức tăng cao nhất sau khi chờ ít nhất hai tuần và có thể lâu hơn. Vì vậy, cộng đồng xin vui lòng nâng cấp bất kỳ giải pháp nào bạn thích. Sự thông minh / vẻ đẹp của mã quan trọng hơn nhiều so với người đăng đầu tiên.
Chúc mừng mã hóa!