使用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
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP