ধরুন আমাদের একটি ধনাত্মক সংখ্যা n আছে, আমাদের পরীক্ষা করতে হবে প্রদত্ত সংখ্যার বিট প্যাটার্নে n ক্রমাগত 1s গণনা বাম থেকে ডানে বাড়ছে কি না।
সুতরাং, যদি ইনপুটটি n =1775 এর মত হয়, তাহলে আউটপুট হবে True, যেহেতু n-এর বাইনারি উপস্থাপনা হল 11011101111, তাই একটানা 1 এর সংখ্যা [2, 3, 4] যা বাড়ছে
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- bits_pattern :=n এর বিটের একটি নতুন তালিকা
- bit_count :=বিট_প্যাটার্নের আকার
- p_cnt :=0, c_cnt :=0
- i :=0
- যখন আমি
- যদি bits_pattern[i] 1 এর মত হয়, তাহলে
- c_cnt :=c_cnt + 1, i :=i + 1
- অন্যথায় যখন bits_pattern[i - 1] 0 হয়, তখন
- i :=i + 1, c_cnt :=0
- পরবর্তী পুনরাবৃত্তির জন্য যান
- অন্যথায়,
- যদি c_cnt
- রিটার্ন 0
- i :=i + 1, p_cnt :=c_cnt, c_cnt :=0
- যদি bits_pattern[i] 1 এর মত হয়, তাহলে
- মিথ্যে ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
def solve(n): bits_pattern = list(bin(n)) bit_count = len(bits_pattern) p_cnt = 0 c_cnt = 0 i = 0 while i < bit_count: if bits_pattern[i] == '1': c_cnt += 1 i += 1 elif bits_pattern[i - 1] == '0': i += 1 c_cnt = 0 continue else: if c_cnt < p_cnt: return 0 i += 1 p_cnt = c_cnt c_cnt = 0 if p_cnt > c_cnt and c_cnt != 0: return False return True n = 1775 print(solve(n))
ইনপুট
1775
আউটপুট
True