ধরুন আমাদের একটি ইন্টিজার n আছে। সমস্যাটি হলো চেক করা: এই ইন্টিজারের বাইনারি রিপ্রেজেন্টেশনে অল্টারনেট প্যাটার্ন (101010…) আছে কিনা।
অ্যাপ্রোচটি হলো: num = n XOR (n >> 1) ক্যালকুলেট করুন। এখন যদি num-এর সব বিট ১ হয়, তবে নম্বরটিতে অল্টারনেট প্যাটার্ন আছে।
উদাহরণ
#include <iostream> #include <algorithm> using namespace std; bool isAllBitSet(int n){ if (((n + 1) & n) == 0) return true; return false; } bool hasAlternatePattern(unsigned int n) { unsigned int num = n ^ (n >> 1); return isAllBitSet(num); } int main() { unsigned int number = 42; if(hasAlternatePattern(number)) cout << "Has alternating pattern"; else cout << "Has no alternating pattern"; }আউটপুট
Has alternating pattern