Computer >> Máy Tính >  >> Lập trình >> Java

Tìm mảng bằng cách sử dụng các XOR khác nhau của các phần tử trong nhóm có kích thước 4 trong Java

Chúng tôi được cung cấp với một mảng số nguyên có kích thước N (kích thước của bội số 4) và chúng tôi phải thực hiện hoạt động Xclusive OR trên mảng sao cho đầu vào [1 - 4] giống với độ phân giải [1 - 4] và các điều kiện tính toán là Nếu arr [1 - 4] ={a1, a2, a3, a4} thì q [1 - 4] ={a1 ⊕ a2 ⊕ a3, a1 ⊕ a2 ⊕ a4, a1 ⊕ a3 ⊕ a4, a2 ⊕ a3 ⊕ a4}

Hãy cho chúng tôi xem các tình huống đầu ra đầu vào khác nhau cho việc này -

Trong - int [] input ={5, 2, 3, 4};

Hết - Kết quả sau thao tác XOR 4 3 2 5

Giải thích - Đầu ra của cổng Exclusive-OR chỉ ở mức "CAO" khi cả hai thiết bị đầu cuối đầu vào của nó ở mức logic "KHÁC NHAU" với nhau. Đầu ra là "0" nếu hai đầu vào này, A và B, đều ở mức logic "1" hoặc "0", làm cho cổng trở thành "cổng lẻ nhưng không phải là cổng chẵn". Nói cách khác, khi các đầu vào có số lẻ là 1, đầu ra là "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

Trong - int [] input ={7, 6, 4, 4, 3, 8, 9, 5};

Hết - Kết quả sau hoạt động XOR 5 5 7 6 2 14 15 4

Giải thích - Đầu ra của cổng Exclusive-OR chỉ ở mức "CAO" khi cả hai thiết bị đầu cuối đầu vào của nó ở mức logic "KHÁC NHAU" với nhau. Đầu ra là "0" nếu hai đầu vào này, A và B, đều ở mức logic "1" hoặc "0", làm cho cổng trở thành "cổng lẻ nhưng không phải là cổng chẵn". Nói cách khác, khi các đầu vào có số lẻ là 1, đầu ra là "1." Sẽ chỉ hoạt động đối với đầu vào [] có kích thước bội của 4, các mảng đầu vào có kích thước khác sẽ hiển thị số 0 thay cho các số được đặt lẻ.

Kết quả sau các hoạt động XOR 5 5 7 6 2 14 15 4

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau -

  • Theo tính chất của XOR a ⊕ a =0 và a ⊕ 0 =a. (a ⊕ b ⊕ c) ⊕ (b ⊕ c ⊕ d) =a ⊕ d (As (b ​​⊕ c) ⊕ (b ⊕ c) =0)

  • Để tính toán, mảng được chia thành 4 nhóm và chúng tôi sẽ tuân theo các thuộc tính của XOR để tính toán kết quả của mỗi nhóm.

  • Lấy tham chiếu từ tính chất trên bằng cách sử dụng (a ⊕ d), chúng ta có thể tính được b và c (a ⊕ b ⊕ d) ⊕ (a ⊕ d) =b (a ⊕ c ⊕ d) ⊕ (a ⊕ d) =c

  • Và bằng cách sử dụng b và c, chúng ta có thể nhận được a và d bằng cách sử dụng cách tiếp cận sau (a ⊕ b ⊕ c) ⊕ (b) ⊕ (c) =a (b ⊕ c ⊕ d) ⊕ (b) ⊕ (c) =d

  • Quy trình được lặp lại cho cả bốn nhóm

  • Một vòng lặp được lặp lại với 2 con trỏ i và j cho đến khi độ dài của mảng chia cho bốn và một giá trị tạm thời (ans) và một mảng tiện ích (lưu trữ câu trả lời) được giới thiệu.

  • Bên trong vòng lặp for sau các hoạt động xor được thực hiện

    ans =mảng đầu vào [i] ⊕ mảng đầu vào [i + 3]

    Mảng tiện ích [i + 1] (tính b) =mảng đầu vào [i + 1] ⊕ ans

    Mảng tiện ích [i + 2] (tính c) =mảng đầu vào [i + 2] ⊕ ans

    Mảng tiện ích [i] (tính a) =mảng đầu vào [i] ⊕ ((Mảng tiện ích [i + 1]) ^ (Mảng tiện ích [i + 2]))

    Mảng tiện ích [i] (tính d) =mảng đầu vào [i + 3] ⊕ ((Mảng tiện ích [i + 1]) ^ (Mảng tiện ích [i + 2]))

  • Và con trỏ được cập nhật cho bộ bốn ký tự tiếp theo

  • Cuối cùng, mảng được in và kết quả được trả lại cho người dùng.

Ví dụ

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]);
      }
   }
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra Kết quả sau

Different XORs of elements in groups of size 4 is :
4
5
6
0