Maison > développement back-end > C++ > le corps du texte

Dans un programme C, imprimez la paire d'éléments avec la plus grande valeur AND dans un tableau

WBOY
Libérer: 2023-08-29 19:41:11
avant
1155 Les gens l'ont consulté

Dans un programme C, imprimez la paire déléments avec la plus grande valeur AND dans un tableau

Selon la question, on nous donne un tableau contenant n entiers positifs, et nous devons trouver la paire avec la valeur ET maximale dans le tableau.

Exemple

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
Copier après la connexion

La méthode pour trouver la valeur ET maximale est similaire à la recherche de la valeur ET maximale dans un tableau. Le programme doit trouver la paire d’éléments qui aboutit à la valeur AND résultante. Pour trouver ces éléments, parcourez simplement l'ensemble du tableau et trouvez la valeur AND de chaque élément avec la valeur AND maximale (résultat) que vous obtenez, si arr[i] & result == result, cela signifie que arr[i] est la valeur ET maximale qui sera générée. Éléments des valeurs AND. De plus, dans le cas où la valeur ET (résultat) maximale est nulle, il faut imprimer "impossible". La traduction de

Algorithm

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
Copier après la connexion

Example

est :

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;
}
Copier après la connexion

Output

Si nous exécutons le programme ci-dessus, il générera la sortie suivante −

pair = 8 9
The maximum and value= 8
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal