मान लीजिए कि हमारे पास दो पूर्णांक N और K हैं; हमें N अद्वितीय मान खोजने होंगे जिनका बिट-वार OR K के समान है। यदि ऐसा कोई परिणाम नहीं है, तो -1
लौटाएंइसलिए, यदि इनपुट N =4 और K =6 जैसा है, तो आउटपुट [6,0,1,2] होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
मैक्स :=32
-
देखी गई :=आकार MAX की सूची और गलत से भरें
-
रेस :=एक नई सूची
-
फ़ंक्शन जोड़ें () को परिभाषित करें। यह संख्या लेगा
-
बिंदु :=0
-
मान :=0
-
मेरे लिए 0 से MAX की सीमा में, करें
-
अगर विज़िट किया गया [i] शून्य नहीं है, तो
-
अगले पुनरावृत्ति के लिए जाएं
-
-
अन्यथा,
-
अगर संख्या और 1 शून्य नहीं है, तो
-
मान :=मान +(2^i)
-
-
अंक :=num/2 (केवल पूर्णांक भाग लें)
-
-
-
रेस के अंत में वैल्यू डालें
-
मुख्य विधि से, निम्न कार्य करें -
-
pow2 :=2^0 से 2^31 तक 2 की शक्ति की एक सरणी
-
रेस के अंत में 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]