Thứ Tư, 1 tháng 5, 2024

2.4 :Xoay vòng mảng

 

Dưới đây là cách bạn có thể triển khai phương thức xoayvongmang() với số lượng phần tử dịch chuyển k được nhập từ bàn phím:

import java.util.Scanner; public void xoayvongmang() { Scanner scanner = new Scanner(System.in); // Nhập số lượng phần tử dịch chuyển từ bàn phím System.out.print("Nhập số lượng phần tử dịch chuyển (k): "); int k = scanner.nextInt(); System.out.println("Mảng ban đầu là: "); for (int i = 0; i < mang.length; i++) { System.out.println(mang[i]); } // Tạo một mảng phụ để lưu trữ các phần tử đã được dịch chuyển int[] b = new int[mang.length]; // Dịch chuyển phần tử mảng ban đầu sang phải for (int i = 0; i < mang.length; i++) { b[(i + k) % mang.length] = mang[i]; } // Dịch chuyển phần tử mảng ban đầu sang trái for (int i = 0; i < mang.length; i++) { b[(i - k + mang.length) % mang.length] = mang[i]; } // Hiển thị mảng sau khi đã xoay vòng System.out.println("Mảng sau khi xoay vòng là: "); for (int i = 0; i < b.length; i++) { System.out.println(b[i]); } scanner.close(); }


- Trong đoạn mã b[(i + k) % mang.length] = mang[i];, chúng ta sử dụng công thức (i + k) % mang.length để xác định vị trí mới của các phần tử trong mảng b sau khi dịch chuyển. Hãy hiểu cách hoạt động của nó như sau:

  1. (i + k): Đây là vị trí mới mà chúng ta muốn đặt phần tử mang[i] trong mảng b. i là vị trí hiện tại của phần tử trong mảng mang, và k là số lượng phần tử mà chúng ta muốn dịch chuyển sang phải.

  2. % mang.length: Toán tử % (modulo) được sử dụng để giữ cho kết quả nằm trong phạm vi từ 0 đến mang.length - 1. Nó chia phần tử (i + k) cho độ dài của mảng mang và trả về phần dư.

(*) (i - k + mang.length) % mang.length: Đầu tiên, chúng ta trừ đi k từ vị trí hiện tại i để tính toán vị trí mới của phần tử. Nếu k là 1 và i là 0 (phần tử đầu tiên), kết quả sẽ là -1, tức là vị trí cuối cùng của mảng. Tuy nhiên, chúng ta cần đảm bảo rằng kết quả nằm trong phạm vi từ 0 đến mang.length - 1, vì vậy chúng ta cộng thêm mang.length trước khi áp dụng phép % mang.length để lấy phần dư.

Không có nhận xét nào:

Đăng nhận xét