Trình tự của Recamán được định nghĩa như sau:
hoặc bằng mã giả:
a(0) = 0,
if (a(n - 1) - n) > 0 and it is not
already included in the sequence,
a(n) = a(n - 1) - n
else
a(n) = a(n - 1) + n.
Các số đầu tiên là ( OEIS A005132 ):
0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9, 24, 8, 25, 43, 62, 42, 63, 41, 18, 42
Nếu bạn nghiên cứu trình tự này, bạn sẽ nhận thấy rằng có các bản sao, ví dụ a(20) = a(24) = 42(0-index). Chúng tôi sẽ gọi một số là một bản sao nếu có ít nhất một số giống nhau ở trước số đó trong chuỗi.
Thử thách:
Lấy một đầu vào số nguyên k và xuất ra các số trùng lặp k đầu tiên theo thứ tự chúng được tìm thấy dưới dạng trùng lặp trong Chuỗi của Recamán, hoặc chỉ số thứ k .
Số trùng lặp đầu tiên này là:
42, 43, 78, 79, 153, 154, 155, 156, 157, 152, 265, 261, 262, 135, 136, 269, 453, 454, 257, 258, 259, 260, 261, 262
Một số điều cần lưu ý:
- a (n) không được tính là trùng lặp nếu không có số nào giống nhau trong a (0) ... a (n-1) , ngay cả khi a (n + m) == a (n) .
- 42 sẽ trước 43, vì trùng lặp của nó xảy ra trước 43 trùng lặp
- Trình tự không được sắp xếp
- Có các yếu tố trùng lặp trong chuỗi này quá. Ví dụ, số thứ 12 và số thứ 23 đều là số 262 (được lập chỉ mục 0).
Các trường hợp thử nghiệm (0 chỉ mục)
k Output
0 42
9 152
12 262
23 262
944 5197
945 10023
10000 62114
Đây là môn đánh gôn , vì vậy mã ngắn nhất trong mỗi ngôn ngữ sẽ thắng!
Giải thích được khuyến khích!
43đầu ra trước 42? Nó xuất hiện đầu tiên trong chuỗi của Recamán. Bạn có nghĩa là đầu ra đầu tiên là đầu tiên được tìm thấy là một bản sao?