কম্পিউটার

পাইথনে n এর মতো একই সংখ্যক সেট বিট সহ উচ্চতর সংখ্যা খুঁজতে প্রোগ্রাম?


ধরুন আমাদের একটি সংখ্যা n আছে; আমাদেরকে বাইনারি আকারে n-এর মতো 1s-এর সমান সংখ্যা সহ সবচেয়ে ছোট পরবর্তী উচ্চতর সংখ্যাটি খুঁজে বের করতে হবে।

সুতরাং, যদি ইনপুটটি n =7 এর মত হয়, তাহলে আউটপুট হবে 11, যেহেতু বাইনারিতে 7 হল 0111 এবং 7 থেকে পরবর্তী উচ্চতর তিনটি সহ 11 হবে যা বাইনারিতে 1011।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব:

  • অনুলিপি :=n, শূন্য :=0, ones :=0

  • কপি 0 না হলে এবং কপি জোড় হয়, করুন

    • শূন্য :=শূন্য + 1

    • অনুলিপি =অনুলিপি / 2

  • যখন অনুলিপি বিজোড় হয়, করুন

    • ones :=ones + 1

    • অনুলিপি =অনুলিপি / 2

  • ডান:=ones + শূন্য

  • n :=n বা (2^ডান)

  • n :=n এবং ((2^ডান) - 1)

    এর বিপরীত
  • n :=n OR((2 ^ (একটি - 1)) - 1

  • ফেরত n

আরও ভালভাবে বোঝার জন্য আসুন নিম্নলিখিত বাস্তবায়ন দেখি:

উদাহরণ

class Solution:
   def solve(self, n):
      copy = n
      zeros = 0
      ones = 0
      while copy and not copy & 1:
         zeros += 1
         copy >>= 1
      while copy & 1:
         ones += 1
         copy >>= 1
      right = ones + zeros
      n |= 1 << right
      n &= ~((1 << right) - 1)
      n |= (1 << ones - 1) - 1
      return n

ob = Solution()
n = 7
print(ob.solve(n))

ইনপুট

7

আউটপুট

11

  1. পাইথন ব্যবহার করে একই লেবেল সহ সাব-ট্রিতে নোডের সংখ্যা খুঁজে বের করার প্রোগ্রাম

  2. পাইথন প্রোগ্রাম একটি পূর্ণসংখ্যা সেট বিট গণনা

  3. পাইথন প্রোগ্রাম একটি তালিকায় সবচেয়ে বড় সংখ্যা খুঁজে বের করতে

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