मान लीजिए हमें दो पूर्णांक k और n दिए गए हैं। हमारा कार्य 1 से n तक की सभी संख्या जोड़ियों के बीच तीन ऑपरेशन करना है: बिटवाइज AND, बिटवाइज OR, और बिटवाइज XOR। हमें उन सभी जोड़ियों के लिए तीनों ऑपरेशन का अधिकतम मान वापस करना है जो दिए गए मान k से कम हो।
उदाहरण के लिए, यदि इनपुट n = 5, k = 5 है, तो आउटपुट 4 3 4 होगा।
5 से कम सभी संख्या जोड़ियों के लिए AND, OR, और XOR ऑपरेशन का अधिकतम मान क्रमशः 4, 3, और 4 है। हम देख सकते हैं कि इन ऑपरेशन के मान दिए गए मान k से कम हैं, जो 5 है।
हल करने के चरण
- andMax := 0, orMax = 0, xorMax = 0
- value1 := 0, value2 = 0, value3 = 0
- i := 1 से शुरू करें, जब i <= n, i को 1 से बढ़ाते हुए करें:
- j := i+1 से शुरू करें, जब j <= n, j को 1 से बढ़ाते हुए करें:
- value1 := i AND j
- value2 := i OR j
- value3 := i XOR j
- यदि value1 > andMax और value1 < k, तो andMax := value1
- यदि value2 > orMax और value2 < k, तो orMax := value2
- यदि value3 > xorMax और value3 < k, तो xorMax := value3
- j := i+1 से शुरू करें, जब j <= n, j को 1 से बढ़ाते हुए करें:
- andMax, orMax, xorMax प्रिंट करें
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
#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