একটি ধনাত্মক পূর্ণসংখ্যা দেওয়া আছে। আমাদের চেক করতে হবে এর বাইনারি রিপ্রেজেন্টেশনে অল্টারনেটিং বিট আছে কিনা, অর্থাৎ দুটি সন্নিহিত বিটের মান সবসময় ভিন্ন থাকবে।
ইনপুট ১০ হলে আউটপুট True, কারণ ১০-এর বাইনারি ১০১০।
সমাধানের ধাপসমূহ
- p := n AND 1
- যদি n < 2 হয়, true রিটার্ন করুন
- n := n/2
- যখন n != 0:
- c := n AND 1
- যদি c XOR p == 0 হয়, false রিটার্ন করুন
- p := c
- n := n/2
- true রিটার্ন করুন
উদাহরণ
#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;
}
};
int main(){
Solution ob;
cout << (ob.hasAlternatingBits(10));
}ইনপুট
10
আউটপুট
1