使用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

更新於:2021年11月5日

138 次檢視

啟動您的職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.