Giới thiệu (có thể bỏ qua)
Đặt tất cả các số dương theo thứ tự thông thường của nó (1, 2, 3, ...) là một chút nhàm chán, phải không? Vì vậy, đây là một loạt các thách thức xung quanh hoán vị (chia sẻ lại) của tất cả các số dương. Đây là thử thách thứ năm trong loạt bài này (liên kết đến thử thách thứ nhất , thứ hai , thứ ba và thứ tư ).
Trong thử thách này, chúng ta sẽ gặp mảng Wythoff, đó là một trận tuyết lở đan xen giữa các chuỗi Fibonacci và chuỗi Beatty!
Các số Fibonacci có lẽ là dành cho hầu hết các bạn một chuỗi được biết đến. Với hai con số bắt đầu và , sau được xác định bởi: cho .
Chuỗi Beatty , được đưa ra một tham số là: cho . Một trong những thuộc tính của chuỗi Beatty là với mỗi tham số , có chính xác một tham số , sao cho các chuỗi Beatty cho các tham số đó không khớp nhau và được nối với nhau, chúng bao gồm tất cả các số tự nhiên loại trừ 0 (ví dụ: ).B r ∪ B r / ( r - 1 ) = N ∖ { 0 }
Bây giờ đến phần tâm trí: bạn có thể tạo một mảng, trong đó mỗi hàng là một chuỗi Fibonacci và mỗi cột là một chuỗi Beatty. Mảng này là mảng Wythoff . Phần tốt nhất là: mỗi số dương xuất hiện chính xác một lần trong mảng này! Mảng trông như thế này:
1 2 3 5 8 13 21 34 55 89 144 ...
4 7 11 18 29 47 76 123 199 322 521 ...
6 10 16 26 42 68 110 178 288 466 754 ...
9 15 24 39 63 102 165 267 432 699 1131 ...
12 20 32 52 84 136 220 356 576 932 1508 ...
14 23 37 60 97 157 254 411 665 1076 1741 ...
17 28 45 73 118 191 309 500 809 1309 2118 ...
19 31 50 81 131 212 343 555 898 1453 2351 ...
22 36 58 94 152 246 398 644 1042 1686 2728 ...
25 41 66 107 173 280 453 733 1186 1919 3105 ...
27 44 71 115 186 301 487 788 1275 2063 3338 ...
...
Một phần tử ở hàng và cột được định nghĩa là:
trong đó là tỷ lệ vàng: .
Nếu chúng ta tuân theo các đường chéo của mảng này, chúng ta sẽ nhận được A035513 , đây là chuỗi mục tiêu cho thử thách này (lưu ý rằng chuỗi này được chính Neil Sloane thêm vào OEIS !). Vì đây là một thử thách "chuỗi thuần", nên nhiệm vụ là xuất cho cho trước làm đầu vào, trong đó là A035513 .
Có nhiều chiến lược khác nhau mà bạn có thể làm theo để đi đến , điều này làm cho thử thách này (theo tôi) thực sự thú vị.
Bài tập
Cho một đầu vào số nguyên , đầu ra ở định dạng số nguyên, trong đó là A035513 .
Lưu ý: lập chỉ mục dựa trên 1 được giả định ở đây; bạn có thể sử dụng lập chỉ mục dựa trên 0, vì vậy , v.v. Hãy đề cập đến điều này trong câu trả lời của bạn nếu bạn chọn sử dụng nó.
Các trường hợp thử nghiệm
Input | Output
---------------
1 | 1
5 | 7
20 | 20
50 | 136
78 | 30
123 | 3194
1234 | 8212236486
3000 | 814
9999 | 108240
29890 | 637
Có thể rất vui khi biết rằng lớn nhất cho là
Quy tắc
- Đầu vào và đầu ra là số nguyên
- Chương trình của bạn ít nhất phải hỗ trợ đầu vào trong phạm vi từ 1 đến 32767). Lưu ý rằng có tới 30 chữ số trong phạm vi này ...
- Đầu vào không hợp lệ (0, số float, chuỗi, giá trị âm, v.v.) có thể dẫn đến đầu ra không dự đoán được, lỗi hoặc (không) hành vi được xác định.
- Mặc định I / O quy tắc áp dụng.
- Lỗ hổng mặc định bị cấm.
- Đâ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
999không phải9999