用 C 语言编程,打印数组中 AND 值最大的一个对。


根据问题,我们得到一个由 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
STOP

示例

#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;
}
// 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

更新于: 22-8-2019

174 浏览

开启你的 事业

完成课程即可获得认证

开始
广告
© . All rights reserved.