在 Java 中使用大小为 4 的组中元素的不同异或来查找数组
给定一个大小为N(4的倍数的大小)的整数数组,我们必须对该数组执行异或运算,使得input[1-4]类似于utility_arr[1-4],计算条件为Ifarr[1–4]={a1,a2,a3,a4}然后q[1–4]={a1⊕a2⊕a3,a1⊕a2⊕a4,a1⊕a3⊕a4,a2⊕a3⊕a4}
让我们看看这个的各种输入输出场景-
In −int[]input={5,2,3,4};
Out -XOR运算后的结果4325
解释 -异或门的输出仅在其两个输入端子彼此处于“不同”逻辑电平时才变为“高”。如果这两个输入A和B都处于逻辑电平“1”或“0”,则输出为“0”,从而使门成为“奇数门而不是偶数门”。换句话说,当输入为奇数个1时,输出为“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 -XOR运算后的结果5576214154
说明 -异或门的输出仅在其两个输入端子彼此处于“不同”逻辑电平时才变为“高”。如果这两个输入A和B都处于逻辑电平“1”或“0”,则输出为“0”,从而使门成为“奇数门而不是偶数门”。换句话说,当输入为奇数个1时,输出为“1”。仅适用于大小为4的倍数的input[],其他大小的输入数组将显示0代替奇数。
异或运算后的结果5576214154
以下程序中使用的方法如下-
根据异或的性质a⊕a=0和a⊕0=a。(a⊕b⊕c)⊕(b⊕c⊕d)=a⊕d(As(b⊕c)⊕(b⊕c)=0)
为了计算,数组被分成4组,我们将按照XOR的特性来计算每组的结果。
使用(a⊕d)参考上述性质,我们可以计算出b和c(a⊕b⊕d)⊕(a⊕d)=b(a⊕c⊕d)⊕(a⊕d)=c
通过使用b和c,我们可以使用以下方法得到a和d(a⊕b⊕c)⊕(b)⊕(c)=a(b⊕c⊕d)⊕(b)⊕(c)=d
对所有四组重复该过程
循环使用2个指针i和j进行迭代,直到数组的长度除以4,value(ans)并且array(whichstoresanswers)引入了一个temp和一个实用程序。
在for循环内实现了以下xor操作
ans=输入数组[i]⊕输入数组[i+3]
效用数组[i+1](计算b)=输入数组[i+1]⊕ans
效用数组[i+2](计算c)=输入数组[i+2]⊕ans
Utilityarray[i](calculatinga)=inputarray[i]⊕((Utilityarray[i+1])^(Utilityarray[i+2]))
效用数组[i](计算d)=输入数组[i+3]⊕((效用数组[i+1])^(效用数组[i+2]))
并且针对下一组四个字符更新指针
最后,打印数组并将结果返回给用户。
示例
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("大小为4的组中元素的不同异或为: "); for (int i = 0; i < arr.length; i++){ System.out.println(arr[i]); } } }输出结果
如果我们运行上面的代码,它将生成以下输出
Different XORs of elements in groups of size 4 is : 4 5 6 0