
根据问题,我们给定了一个包含n个正整数的数组,我们需要从数组中找到具有最大AND值的一对。
示例
Input: arr[] = { 4, 8, 12, 16 }
Output: pair = 8 12
The maximum and value= 8
Input:arr[] = { 4, 8, 16, 2 }
Output: pair = No possible AND
The maximum and value = 0寻找最大AND值的方法类似于在数组中寻找最大AND值。程序必须找到导致得到的AND值的元素对。为了找到这些元素,只需遍历整个数组,并找到每个元素与得到的最大AND值(结果)的AND值,如果arr[i] & result == result,则表示arr[i]是将生成最大AND值的元素。此外,在最大AND值(结果)为零的情况下,我们应该打印“不可能”。
算法
int checkBit(int pattern, int arr[], int n)
START
STEP 1: DECLARE AND INITIALIZE count AS 0
STEP 2: LOOP FOR i = 0 AND i < n AND i++
IF (pattern & arr[i]) == pattern THEN,
INCREMENT count BY 1
STEP 3: RETURN count
STOP
int maxAND(int arr[], int n)
START
STEP 1: DECLARE AND INITIALIZE res = 0 AND count
STEP 2: LOOP FOR bit = 31 AND bit >= 0 AND bit--
count = GOTO FUNCTION checkBit(res | (1 << bit), arr,n)
IF count >= 2 THEN,
res |= (1 << bit);
END IF
IF res == 0
PRINT "no possible AND”
ELSE
PRINT "Pair with maximum AND= "
count = 0;
LOOP FOR int i = 0 AND i < n && count < 2 AND i++
IF (arr[i] & res) == res THEN,
INCREMENT count BY 1
PRINT arr[i]
END IF
END FOR
END FOR
RETURN res
STOPExample
的翻译为:示例
#includeint 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; } // Function for finding maximum AND value pair 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) //if there is no pair available printf("no possible and "); else { //Printing the pair available printf("Pair with maximum AND= "); count = 0; for (int i = 0; i < n && count < 2; i++) { // incremnent count value after // printing element 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("
The maximum AND value= %d ", ma); return 0; }
输出
如果我们运行上述程序,它将生成以下输出−
pair = 8 9 The maximum and value= 8










