On nous donne un tableau d'entiers de taille N (taille multiple de 4) et nous devons Effectue une opération XOR sur le tableau afin que l'entrée [1- 4] ressemble à utility_arr[1- 4] et la condition de calcul sont si arr[1 – 4] = {a1, a2, a3, a4} Alors q[1 – 4] = {a1 ⊕ a2 ⊕ a3, a1 ⊕ a2 ⊕ a4, a1 ⊕ a3 ⊕ a4, a2 ⊕ a3 ⊕ a4}
Voyons les différents scénarios d'entrée et de sortie de cette situation -
In − int[] input = { 5, 2, 3, 4 };
Out − Le résultat après l'opération XOR 4 3 2 5
Explication−La sortie de la porte XOR est uniquement dans son Le deux bornes d'entrée ne passent à "haut" que lorsqu'elles sont à des niveaux logiques "différents". Si les deux entrées A et B sont au niveau logique « 1 » ou « 0 », la sortie est « 0 », faisant de la porte une « porte impaire mais pas paire ». En d’autres termes, lorsque l’entrée a un nombre impair de 1, la sortie est « 1 ».
a1 ⊕ a2 ⊕ a3 = 5 ⊕ 2 ⊕ 3 = 4
a1 ⊕ a2 ⊕ a4 = 5 ⊕ 2 ⊕ 4 = 3
a1 ⊕ a3 ⊕ a4 = 5⊕ 3 ⊕ 4 = 2
a2 ⊕a3 ⊕ a4 = 2 ⊕ 3 ⊕ 4 = 5
In − int[] input = { 7, 6, 4, 4, 3, 8, 9, 5 };
Out − Le résultat de l'opération XOR 5 5 7 6 2 14 15 4
Explication− La sortie d'une porte XOR ne passe "haute" que lorsque ses deux bornes d'entrée sont à des niveaux logiques "différents" l'un de l'autre. Si les deux entrées A et B sont au niveau logique « 1 » ou « 0 », la sortie est « 0 », faisant de la porte une « porte impaire mais pas paire ». En d’autres termes, lorsque l’entrée a un nombre impair de 1, la sortie est « 1 ». Fonctionne uniquement pour les tailles input[] qui sont un multiple de 4, les tableaux d'entrée d'autres tailles afficheront des 0 à la place des nombres dans des positions impaires.
Selon les propriétés de XOR a ⊕ a = 0 et a ⊕ 0 = a. (a ⊕ b ⊕ c) ⊕ (b ⊕ c ⊕ d) = a ⊕ d (As (b ⊕ c) ⊕ (b ⊕ c) = 0)
Pour le calcul, le tableau est divisé en 4 groupes, nous Les résultats pour chaque groupe seront calculés en fonction des propriétés XOR.
En nous référant aux propriétés ci-dessus, en utilisant (a ⊕ d) nous pouvons calculer b et c (une ⊕ b ⊕ d) ⊕ (une ⊕ d) = b (a ⊕ c ⊕ d) ⊕ (a ⊕ d) = c
En utilisant b et c, nous pouvons obtenir a et d en utilisant (une ⊕ b ⊕ c) ⊕ (b) ⊕ (c) = une (b ⊕ c ⊕ d) ⊕ (b) ⊕ (c) = d
Répétez le processus pour les quatre groupes
Parcourez la boucle en utilisant 2 pointeurs i et j jusqu'à ce que la longueur du tableau soit divisée par quatre, et introduisez des valeurs temporaires (ans) et des tableaux utilitaires (pour stocker les réponses).
Implémentez l'opération XOR suivante dans la boucle for
ans= input array[i] ⊕ input array[i+3]
utility array[i+1](calculate b)= input array[i+ 1] ⊕ ans
tableau d'utilité[i+2](calculer c)=tableau d'entrée[i+2] ⊕ ans
tableau d'utilité[i](calculer a)=tableau d'entrée[i]⊕((tableau d'utilité[i + 1]) ^ (tableau utilitaire [i + 2]))
tableau utilitaire [i] (calculer d) ) = tableau d'entrée [i + 3] ⊕ ((tableau utilitaire [i + 1]) ^ (tableau utilitaire [ i + 2]))
et le pointeur est mis à jour pour le prochain ensemble de quatre caractères
Enfin, le tableau est imprimé et le résultat est renvoyé à l'utilisateur.
import java.util.Arrays; import java.util.List; public class Tutorials{ static int ans = 0; public static void main(String args[]){ int[] input = {7, 1, 2, 3}; int[] arr = new int[input.length]; for (int i = 0, j = 0; j < input.length / 4; j++){ ans = input[i] ^ input[i + 3]; arr[i + 1] = input[i + 1] ^ ans; arr[i + 2] = input[i + 2] ^ ans; arr[i] = input[i] ^ ((arr[i + 1]) ^ (arr[i + 2])); arr[i + 3] = input[i + 3] ^ (arr[i + 1] ^ arr[i + 2]); i += 4; } System.out.println("Different XORs of elements in groups of size 4 is: "); for (int i = 0; i < arr.length; i++){ System.out.println(arr[i]); } } }
Si nous exécutons le code ci-dessus, la sortie suivante sera générée
Different XORs of elements in groups of size 4 is : 4 5 6 0
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!