Cho một số nguyên , bạn phải tìm số bit tối thiểu cần được đảo trong để biến nó thành số vuông . Bạn chỉ được phép đảo ngược các bit dưới mức quan trọng nhất .
Ví dụ
- 2 2 0 đã là một số vuông ( ), vì vậy đầu ra dự kiến là .
- 11000 → 1100 1 25 = 5 2 có thể được biến thành một số vuông bằng cách đảo ngược 1 bit: ( ), vì vậy đầu ra dự kiến là .
- 23 20 18 30 10110 → 10 0 0 0 16 = 4 2 2 thành số vuông bằng cách đảo ngược một bit đơn (kết quả có thể là , , và ) nhưng có thể được thực hiện bằng cách đảo ngược 2 bit: ( ), do đó, đầu ra dự kiến là .
Quy tắc
- Sẽ ổn nếu mã của bạn quá chậm hoặc gây ra lỗi cho các trường hợp thử nghiệm lớn hơn, nhưng ít nhất nó phải hỗ trợ trong vòng chưa đầy 1 phút.
- Đây là môn đánh gôn !
Các trường hợp thử nghiệm
Input | Output
----------+--------
4 | 0
22 | 2
24 | 1
30 | 3
94 | 4
831 | 5
832 | 1
1055 | 4
6495 | 6
9999 | 4
40063 | 6
247614 | 7 (smallest N for which the answer is 7)
1049310 | 7 (clear them all!)
7361278 | 8 (smallest N for which the answer is 8)
100048606 | 8 (a bigger "8")
Hoặc ở dạng sao chép / dán thân thiện:
[4,22,24,30,94,831,832,1055,6495,9999,40063,247614,1049310,7361278,100048606]
100048606
TIO, đó có phải là vấn đề không?