Computer >> Máy Tính >  >> Lập trình >> lập trình C

In cặp với giá trị AND lớn nhất trong một mảng trong C Program.

Theo bài toán, chúng ta được cho một mảng gồm n số nguyên dương, chúng ta phải tìm một cặp có giá trị AND lớn nhất từ ​​mảng.

Ví dụ

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

Để tìm giá trị AND tối đa tương tự như tìm giá trị AND tối đa trong một mảng. Chương trình phải tìm ra cặp phần tử tạo ra giá trị AND thu được. Để tìm các phần tử, chỉ cần duyệt qua toàn bộ mảng và tìm giá trị AND của mỗi phần tử với giá trị AND lớn nhất thu được (kết quả) và nếu arr [i] &result ==result, điều đó có nghĩa là arr [i] là phần tử sẽ tạo giá trị AND lớn nhất. Ngoài ra, trong trường hợp nếu giá trị AND lớn nhất (kết quả) bằng 0 thì chúng ta nên in "Không thể" trong trường hợp đó.

Thuật toán

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

Ví dụ

#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\n");
   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("\nThe maximum AND value= %d ", ma);
   return 0;
}

Đầu ra

Nếu chúng ta chạy chương trình trên thì nó sẽ tạo ra kết quả sau -

pair = 8 9
The maximum and value= 8