使用Java查找大小为4的组中元素的不同异或运算得到的数组
给定一个大小为N(4的倍数)的整数数组,我们需要对数组执行异或操作,使得input[1-4]类似于utility_arr[1-4],计算条件如下:如果arr[1-4] = {a1, a2, a3, a4},则q[1-4] = {a1 ⊕ a2 ⊕ a3, a1 ⊕ a2 ⊕ a4, a1 ⊕ a3 ⊕ a4, a2 ⊕ a3 ⊕ a4}
让我们看看各种输入输出场景:
输入 - int[] input = { 5, 2, 3, 4 };
输出 - 异或操作后的结果 4 3 2 5
解释 - 异或门的输出只有当两个输入端处于“不同”逻辑电平的时候才为“高”。如果这两个输入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
输入 - int[] input = { 7, 6, 4, 4, 3, 8, 9, 5 };
输出 - 异或操作后的结果 5 5 7 6 2 14 15 4
解释 - 异或门的输出只有当两个输入端处于“不同”逻辑电平的时候才为“高”。如果这两个输入A和B都处于逻辑电平“1”或“0”,则输出为“0”,这使得该门成为一个“奇数但不是偶数门”。换句话说,当输入中1的个数为奇数时,输出为“1”。仅适用于大小为4的倍数的input[]数组,其他大小的输入数组将在奇数位置显示0。
异或操作后的结果 5 5 7 6 2 14 15 4
下面程序中使用的方法如下:
根据异或的性质,a ⊕ a = 0 且 a ⊕ 0 = a。(a ⊕ b ⊕ c) ⊕ (b ⊕ c ⊕ d) = a ⊕ d (因为(b ⊕ c) ⊕ (b ⊕ c) = 0)
为了计算,数组被分成4个一组,我们将遵循异或的性质来计算每一组的结果。
参考上面的性质,使用(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
这个过程对所有四组重复。
一个循环使用两个指针i和j,直到数组长度除以四,并引入一个临时值(ans)和一个实用数组(存储答案)。
在for循环内,实现以下异或运算:
ans= input array[i] ⊕ input array[i+3]
Utility array[i+1](计算b)= input array[i+1] ⊕ ans
Utility array[i+2](计算c)= input array[i+2] ⊕ ans
Utility array[i](计算a)= input array[i] ⊕ ((Utility array[i + 1]) ^ (Utility array[i + 2]))
Utility array[i](计算d)= input array[i+3] ⊕ ((Utility array[i + 1]) ^ (Utility array[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("Different XORs of elements in groups of size 4 is: "); 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