Java - Kiểm tra mảng một chiều vừa nhập có phải là mảng đối xứng hay không?

Viết chương trình thực hiện các công việc:

  • Nhập liệu cho mảng một chiều có n phần tử nguyên (n > 0) từ bàn phím.
  • Kiểm tra mảng một chiều vừa nhập có đối xứng hay không?

Biết rằng: Mảng một chiều A có n phần tử là mảng đối xứng nếu mọi phần tử của mảng thỏa mãn A[i] = A[n - i - 1] với i = 0, 1,..., n - 1.

Ví dụ: Các mảng một chiều sau đây là đối xứng:

A[0] = 1     A[1] = 2     A[2] = 3     A[3] = 2     A[4] = 1

B[0] = 1     B[1] = 2     B[2] = 3     B[3] = 3     B[4] = 2     B[5] = 1

Các mảng một chiều sau đây là không đối xứng:

C[0] = 1     C[1] = 2     C[2] = 3     C[3] = 1     C[4] = 2

D[0] = 1     D[1] = 2     D[2] = 3     D[3] = 4     D[4] = 2     D[5] = 1

Bài giải

-------------------- ######## --------------------

Bài giải
public static void main(String[] args) {
	int n, kt = 1;
	Scanner scanner = new Scanner(System.in);
		
	do {
		System.out.println("Nhập số phần tử của mảng: ");
		n = scanner.nextInt();
	} while (n <= 0);
		
	int A[] = new int[n];
		
	System.out.println("Nhập giá trị cho các phần tử của mảng: ");
	for (int i = 0; i < n; i++) {
		System.out.print("A[" + i + "] = ");
		A[i] = scanner.nextInt();
	}
		
	// kiểm tra mảng đảo ngược
	// dùng vòng lặp for duyệt i = 0 đến i < n / 2
	// nếu A[i] != A[n - i -1]
	// thì mảng đó không phải mảng đối xứng
	for (int i = 0; i < n / 2; i++) {
		if (A[i] != A[n - i - 1]) {
			kt = 0;
			break;
		}
	}
		
	if (kt == 0) {
		System.out.println("Mảng một chiều vừa nhập không là mảng đối xứng");
	} else {
		System.out.println("Mảng một chiều vừa nhập là mảng đối xứng");
	}
}

Giải thích hoạt động của chương trình trên:

Bước 1: Dùng biến kt để kiểm tra, ban đầu kt = 1 (xem như mảng đối xứng).

Bước 2: Vòng lặp for sẽ duyệt từ phần tử đầu tiên đến phần tử có chỉ số n / 2. Với mỗi lần lặp, so sánh phần tử ở nửa dãy đầu với phần tử đối xứng với nó ở nửa dãy cuối (tức phần tử ở vị trí i so sánh với phần tử ở vị trí n - i - 1), nếu 2 phần tử đó có giá trị không bằng nhau thì trả biến kt = 0 (tức nhận giá trị sai, nghĩa là mảng không đối xứng) và kết thúc lặp.

Bước 3: Khi ra khỏi vòng lặp, căn cứ vào giá trị biến kt để kết luận: nếu kt = 0 thì mảng một chiều không đối xứng, nếu kt = 1 thì mảng một chiều đối xứng.

Kết quả sau khi biên dịch chương trình:

Nếu mảng nhập vào là mảng đối xứng:

Nếu mảng nhập vào không là mảng đối xứng:

Nguồn: freetuts.net