ホームページ  >  記事  >  バックエンド開発  >  C プログラムで、配列内の最大の AND 値を持つ要素のペアを出力します。

C プログラムで、配列内の最大の AND 値を持つ要素のペアを出力します。

WBOY
WBOY転載
2023-08-29 19:41:111101ブラウズ

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 値の要素。さらに、最大の 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

は次のように変換されます:

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。