Vấn đề
Xét một dãy tăng dần được định nghĩa như sau:
- Số
seq(0) = 1là phần tử đầu tiên trong dãy. - Với mỗi x trong dãy, thì
y = 2 * x + 1vàz = 3 * x + 1cũng phải nằm trong dãy. - Không có số nào khác trong dãy.
Do đó, các số hạng đầu tiên của dãy này sẽ là:
[1, 3, 4, 7, 9, 10, 13, 15, 19, 21, 22, 27, ...]
Chúng ta cần viết một hàm nhận vào một số n và trả về số hạng thứ n của dãy này.
Ví dụ
Dưới đây là mã nguồn:
const num = 10;
const findNth = n => {
let seq = [1], x = 0, y = 0
for (let i = 0; i < n; i++) {
let nextX = 2 * seq[x] + 1, nextY = 3 * seq[y] + 1
if (nextX <= nextY) {
seq.push(nextX)
x++
if (nextX == nextY)
y++
} else {
seq.push(nextY)
y++
}
}
return seq[n];
}
console.log(findNth(num));Kết quả
22