Trình tự Stern-Brocot là một chuỗi giống như Fibonnaci có thể được xây dựng như sau:
- Khởi tạo chuỗi với
s(1) = s(2) = 1
- Đặt bộ đếm
n = 1
- Nối
s(n) + s(n+1)
vào chuỗi - Nối
s(n+1)
vào chuỗi - Tăng
n
, trở lại bước 3
Điều này tương đương với:
Trong số các thuộc tính khác, chuỗi Stern-Brocot có thể được sử dụng để tạo ra mọi số hữu tỷ dương có thể. Mỗi số hữu tỷ sẽ được tạo chính xác một lần và nó sẽ luôn xuất hiện theo các thuật ngữ đơn giản nhất; ví dụ, 1/3
là số hữu tỷ thứ 4 trong chuỗi, nhưng các số tương đương 2/6
, 3/9
v.v ... hoàn toàn không xuất hiện.
Chúng ta có thể định nghĩa số hữu tỷ thứ n là r(n) = s(n) / s(n+1)
, s(n)
số Stern-Brocot thứ n, như được mô tả ở trên.
Thử thách của bạn là viết một chương trình hoặc hàm sẽ xuất ra số hữu tỷ thứ n được tạo bằng chuỗi Stern-Brocot.
- Các thuật toán được mô tả ở trên là 1 chỉ mục; nếu mục nhập của bạn là 0 chỉ mục, xin vui lòng nêu trong câu trả lời của bạn
- Các thuật toán được mô tả chỉ nhằm mục đích minh họa, đầu ra có thể được lấy theo bất kỳ cách nào bạn muốn (ngoài mã hóa cứng)
- Đầu vào có thể thông qua STDIN, tham số chức năng hoặc bất kỳ cơ chế đầu vào hợp lý nào khác
- Ouptut có thể là STDOUT, bàn điều khiển, giá trị trả về của hàm hoặc bất kỳ luồng đầu ra hợp lý nào khác
- Đầu ra phải là một chuỗi trong biểu mẫu
a/b
, trong đóa
vàb
là các mục có liên quan trong chuỗi Stern-Brocot. Đánh giá phân số trước khi đầu ra không được phép. Ví dụ, đối với đầu vào12
, đầu ra nên2/5
, không0.4
. - Các sơ hở tiêu chuẩn không được phép
Đây là môn đánh gôn , vì vậy câu trả lời ngắn nhất tính bằng byte sẽ thắng.
Các trường hợp thử nghiệm
Các trường hợp thử nghiệm ở đây là 1 chỉ mục.
n r(n)
-- ------
1 1/1
2 1/2
3 2/1
4 1/3
5 3/2
6 2/3
7 3/1
8 1/4
9 4/3
10 3/5
11 5/2
12 2/5
13 5/3
14 3/4
15 4/1
16 1/5
17 5/4
18 4/7
19 7/3
20 3/8
50 7/12
100 7/19
1000 11/39
Mục nhập OEIS: A002487 Video Numberphile
xuất sắc thảo luận về trình tự: Phân số vô hạn
True/2
không phải là một phân số hợp lệ (theo như tôi quan tâm). Bên cạnh đó, True
không phải lúc nào cũng vậy 1
- một số ngôn ngữ sử dụng -1
thay thế để tránh những lỗi tiềm ẩn khi áp dụng các toán tử bitwise. [cần dẫn nguồn]
True
tương đương 1
và True/2
sẽ có 1/2
.
True
s thay vì1
s?