समस्या के अनुसार हमें n पॉजिटिव इंटीजर्स का एक ऐरे दिया गया है, हमें ऐरे से अधिकतम AND मान वाली जोड़ी ढूंढनी है।
उदाहरण
इनपुट: arr[] = { 4, 8, 12, 16 }
आउटपुट: pair = 8 12
अधिकतम AND मान = 8
इनपुट: arr[] = { 4, 8, 16, 2 }
आउटपुट: pair = No possible AND
अधिकतम AND मान = 0
अधिकतम AND मान ढूंढना ऐरे में अधिकतम AND मान ढूंढने के समान है। प्रोग्राम को उन एलिमेंट्स की जोड़ी ढूंढनी होगी जिनके परिणामस्वरूप प्राप्त AND मान मिले। एलिमेंट्स ढूंढने के लिए, बस पूरे ऐरे को ट्रैवर्स करें और प्रत्येक एलिमेंट का प्राप्त अधिकतम AND मान (परिणाम) के साथ AND मान ढूंढें और यदि arr[i] & result == result, तो इसका मतलब है कि arr[i] वह एलिमेंट है जो अधिकतम AND मान उत्पन्न करेगा। इसके अलावा, यदि अधिकतम AND मान (परिणाम) शून्य है तो हमें उस मामले में "Not possible" प्रिंट करना चाहिए।
एल्गोरिदम
int checkBit(int pattern, int arr[], int n)
शुरुआत
चरण 1: count को 0 घोषित और इनिशियलाइज़ करें
चरण 2: i = 0 से n तक i++ लूप
यदि (pattern & arr[i]) == pattern तो count++
लूप समाप्त
चरण 3: count रिटर्न करें
समाप्त
int maxAND(int arr[], int n)
शुरुआत
चरण 1: res = 0 और count घोषित और इनिशियलाइज़ करें
चरण 2: bit = 31 से 0 तक bit-- लूप
count = checkBit(res | (1 << bit), arr, n)
यदि count >= 2 तो res |= (1 << bit)
यदि res == 0 तो "no possible AND" प्रिंट करें
अन्यथा "Pair with maximum AND= " प्रिंट करें
count = 0
i = 0 से n तक && count < 2 तक i++ लूप
यदि (arr[i] & res) == res तो count++, arr[i] प्रिंट करें
लूप समाप्त
लूप समाप्त
res रिटर्न करें
समाप्त
उदाहरण
#include <stdio.h>
int checkBit(int pattern, int arr[], int n){
int count = 0;
for (int i = 0; i < n; i++)
if ((pattern & arr[i]) == pattern)
count++;
return count;
}
// अधिकतम AND मान वाली जोड़ी ढूंढने का फंक्शन
int maxAND(int arr[], int n){
int res = 0, count;
for (int bit = 31; bit >= 0; bit--) {
count = checkBit(res | (1 << bit), arr, n);
if (count >= 2)
res |= (1 << bit);
}
if (res == 0)
printf("no possible and\n");
else {
printf("Pair with maximum AND= ");
count = 0;
for (int i = 0; i < n && count < 2; i++) {
if ((arr[i] & res) == res) {
count++;
printf("%d ", arr[i]);
}
}
}
return res;
}
int main(int argc, char const *argv[]){
int arr[] = {5, 6, 2, 8, 9, 12};
int n = sizeof(arr)/sizeof(arr[0]);
int ma = maxAND(arr, n);
printf("\nThe maximum AND value= %d ", ma);
return 0;
}
आउटपुट
यदि हम उपरोक्त प्रोग्राम चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा:
Pair with maximum AND= 8 9 The maximum AND value= 8