কম্পিউটার

পাইথনে ক্রমবর্ধমান ক্রম অনুসারে একটি সংখ্যার বিট পরপর সেট বিট গণনা আছে কিনা তা পরীক্ষা করুন


ধরুন আমাদের একটি ধনাত্মক সংখ্যা 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
  • যদি p_cnt> c_cnt এবং c_cnt 0 না হয়, তাহলে
    • মিথ্যে ফেরত দিন
  • সত্য ফেরান
  • আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

    উদাহরণ

    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

    1. পাইথন প্রোগ্রাম পরপর 1’ ছাড়া বাইনারি স্ট্রিং সংখ্যা গণনা করতে

    2. Python List কম্প্রিহেনশন ব্যবহার করে সেট বিট গণনা করুন

    3. পাইথন প্রোগ্রাম 1 থেকে n পর্যন্ত সমস্ত সংখ্যায় মোট সেট বিট গণনা করে।

    4. একটি সংখ্যার মোট বিট গণনা করার জন্য একটি পাইথন প্রোগ্রাম লিখুন?