首頁  >  文章  >  後端開發  >  在C程式中,將一個陣列中具有最大AND值的一對元素列印出來

在C程式中,將一個陣列中具有最大AND值的一對元素列印出來

WBOY
WBOY轉載
2023-08-29 19:41:111100瀏覽

在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&rdquo;
   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

Example

的翻譯為:

範例

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

輸出

如果我們執行上述程序,它將產生以下輸出−

pair = 8 9
The maximum and value= 8

以上是在C程式中,將一個陣列中具有最大AND值的一對元素列印出來的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除