สมมติว่าเรามีจำนวนเต็มบวก เราต้องตรวจสอบว่ามีบิตสลับกันหรือไม่ ดังนั้น บิตที่อยู่ติดกันสองบิตจะมีค่าต่างกันเสมอ
ดังนั้น หากอินพุตเท่ากับ 10 เอาต์พุตจะเป็น True เนื่องจากการแสดงไบนารีของ 10 คือ 1010
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- p :=n AND 1
- ถ้า n <2 แล้ว −
- คืนค่าจริง
- n :=n/2
- ในขณะที่ n ไม่ใช่ศูนย์ ให้ทำ −
- c :=n AND 1
- ถ้า c XOR p เหมือนกับ 0 แล้ว −
- คืนค่าเท็จ
- p :=c
- n :=n/2
- คืนค่าจริง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; class Solution { public: bool hasAlternatingBits(int n) { bool p=n&1; bool c; if(n<2) return true; n>>=1; while(n){ c=n&1; if(c^p==0) return false; p=c; n>>=1; } return true; } }; main(){ Solution ob; cout << (ob.hasAlternatingBits(10)); }
อินพุต
10
ผลลัพธ์
1