Dễ 0 đã giải Tỷ lệ chấp nhận 0%

Dãy Collatz

Làm theo quy tắc chia đôi hoặc nhân ba cộng một cho đến khi đạt 1.

Bắt đầu với n. Nếu n là số chẵn, chia n cho 2; nếu n là số lẻ, nhân n với 3 rồi cộng 1. Lặp lại cho đến khi giá trị là 1. Bao gồm cả giá trị bắt đầu và số 1 cuối cùng trong kết quả của bạn.

Cài đặt hàm collatz_sequence(n).

Đầu vào

n: Số nguyên dương bắt đầu.

Đầu ra

Trả về toàn bộ dãy số theo thứ tự.

Ràng buộc

1 ≤ n ≤ 10.000. Với mọi giá trị trong khoảng này, dãy số sẽ luôn đạt tới 1 theo quy tắc trên; mọi giá trị trong dãy đều nằm trong phạm vi số nguyên 64-bit có dấu.

Ví dụ

Ví dụ 1
Đầu vào:
n = 6

Kết quả mong đợi:
expected = [6, 3, 10, 5, 16, 8, 4, 2, 1]
Đầu vào:
long long n = 6;

Kết quả mong đợi:
std::vector<long long> expected = {6, 3, 10, 5, 16, 8, 4, 2, 1};
Đầu vào:
long n = 6;

Kết quả mong đợi:
long[] expected = new long[] {6, 3, 10, 5, 16, 8, 4, 2, 1};

Giải thích

6 là số chẵn nên chia thành 3. Sau đó 3 thành 10. Tiếp tục áp dụng quy tắc cho đến khi đạt 1.

Ví dụ 2
Đầu vào:
n = 1

Kết quả mong đợi:
expected = [1]
Đầu vào:
long long n = 1;

Kết quả mong đợi:
std::vector<long long> expected = {1};
Đầu vào:
long n = 1;

Kết quả mong đợi:
long[] expected = new long[] {1};

Giải thích

Giá trị bắt đầu đã là 1 nên không cần thực hiện phép biến đổi nào.

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.