मान लीजिए हमें दो पूर्णांक k और n दिए गए हैं। हमारा काम तीन ऑपरेशन करना है; बिटवाइज़ AND, बिटवाइज़ OR, और बिटवाइज़ XOR सभी युग्मों के बीच n रेंज तक। हम किन्हीं दो युग्मों के बीच तीनों संक्रियाओं का अधिकतम मान लौटाते हैं जो दिए गए मान k से कम है।
इसलिए, यदि इनपुट n =5, k =5 जैसा है, तो आउटपुट 4 3 4 होगा।
5 से कम संख्या वाले सभी युग्मों के बीच AND, OR, और XOR संक्रियाओं का सबसे बड़ा मान क्रमशः 4, 3 और 4 है। हम देख सकते हैं कि इन संक्रियाओं के मान दिए गए मान k से कम हैं, जो कि 5 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- और मैक्स:=0, या मैक्स =0, xorMax =0
- value1 :=0, value2 =0, value3 =0
- इनिशियलाइज़ i :=1 के लिए, जब i <=n, अपडेट करें (i को 1 से बढ़ाएँ), करें:
- value1 :=i और j
- value2 :=i OR j
- value3 :=i XOR j
- अगर value1> andMax और value1
- और मैक्स:=value1
- यदि value2> orMax और value2
- या मैक्स :=value2
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> void solve(int n, int k) { int andMax = 0, orMax = 0, xorMax = 0; int value1 = 0, value2 = 0, value3 = 0; for (int i = 1; i <= n; i++) { for (int j = i+1; j <= n; j++) { value1 = i & j; value2 = i | j; value3 = i ^ j; if (value1 > andMax && value1 < k) andMax = value1; if (value2 > orMax && value2 < k) orMax = value2; if (value3 > xorMax && value3 < k) xorMax = value3; } } printf("%d %d %d ", andMax, orMax, xorMax); } int main() { solve(5, 5); return 0; }
इनपुट
5, 5
आउटपुट
4 3 4