ধরুন আমাদের দুটি পূর্ণসংখ্যা N এবং K আছে; আমাদের এন অনন্য মানগুলি খুঁজে বের করতে হবে যার বিট-ওয়াইজ OR K এর মতো। যদি এমন কোন ফলাফল না থাকে, তাহলে -1 ফেরত দিন
সুতরাং, যদি ইনপুটটি N =4 এবং K =6 এর মত হয়, তাহলে আউটপুট হবে [6,0,1,2]।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
সর্বোচ্চ :=32
-
পরিদর্শন করেছেন :=MAX আকারের একটি তালিকা এবং False দিয়ে পূরণ করুন
-
res :=একটি নতুন তালিকা
-
একটি ফাংশন সংজ্ঞায়িত করুন add()। এই সংখ্যা লাগবে
-
পয়েন্ট :=0
-
মান :=0
-
আমি 0 থেকে MAX রেঞ্জের জন্য, কর
-
যদি পরিদর্শন করা হয় [i] অ-শূন্য হয়, তাহলে
-
পরবর্তী পুনরাবৃত্তির জন্য যান
-
-
অন্যথায়,
-
যদি সংখ্যা এবং 1 অ-শূন্য হয়, তাহলে
-
মান :=মান +(2^i)
-
-
num :=num/2 (শুধুমাত্র পূর্ণসংখ্যা অংশ নিন)
-
-
-
res এর শেষে মান সন্নিবেশ করুন
-
প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
-
pow2 :=2^0 থেকে 2^31
পর্যন্ত 2 শক্তির একটি অ্যারে -
res এর শেষে k ঢোকান
-
cnt_k :=k
এ বিটের সংখ্যা -
যদি pow2[cnt_k]
-
রিটার্ন -1
-
-
গণনা :=0
-
আমি 0 থেকে pow2 [cnt_k] - 1 এর মধ্যে, কর
-
যোগ করুন(i)
-
গণনা :=গণনা + 1
-
যদি গণনা n এর সমান হয়, তাহলে
-
লুপ থেকে বেরিয়ে আসুন
-
-
-
রিটার্ন রিটার্ন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
MAX = 32 visited = [False for i in range(MAX)] res = [] def set_bit_count(n): if (n == 0): return 0 else: return (n & 1) + set_bit_count(n >> 1) def add(num): point = 0 value = 0 for i in range(MAX): if (visited[i]): continue else: if (num & 1): value += (1 << i) num = num//2 res.append(value) def solve(n, k): pow2 = [2**i for i in range(MAX)] res.append(k) cnt_k = set_bit_count(k) if (pow2[cnt_k] < n): return -1 count = 0 for i in range(pow2[cnt_k] - 1): add(i) count += 1 if (count == n): break return res n = 4 k = 6 print(solve(n, k))
ইনপুট
4, 6
আউটপুট
[6, 0, 1, 2]