Tất cả thử thách
Dễ 0 đã giải Tỷ lệ chấp nhận 0%

Chia Đôi Đến Khi Còn Một

Đếm số lần chia đôi để đưa một số về 1.

Bạn sẽ học được gì

  • Lặp cho đến khi điều kiện sai
  • Đếm số lần lặp
  • Dùng phép chia nguyên

Đề bài

Xem bản gốc (English)

Liên tục chia n cho 2, bỏ phần dư (chia lấy phần nguyên), cho đến khi kết quả là 1. Đếm số lần chia như vậy.

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

Đầu vào

n: Một số nguyên dương.

Đầu ra

Trả về số lần chia.

Ràng buộc

1 ≤ n ≤ 1.000.000.000.000

Ví dụ

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

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

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

Kết quả mong đợi:
long expected = 4;

Giải thích

20 → 10 → 5 → 2 → 1 cần 4 lần chia.

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

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

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

Kết quả mong đợi:
long expected = 0;

Giải thích

n đã là 1 nên không cần chia lần nào.

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

Đếm xem bạn có thể giảm số bao nhiêu lần bằng cách chia cho 2 trước khi nó thành 1.

Gợi ý 2

Chỉ cần chia nguyên lặp lại; không cần theo dõi phần dư bị bỏ đi.

Gợi ý 3

Đảm bảo dừng đúng khi giá trị chạm 1, không phải khi nó về 0.

Độ phức tạp mong đợi

thời gian O(log n), bộ nhớ phụ O(1)

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.