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:

Trở thành Android Developer chuyên nghiệp với 30h học
Bạn muốn trở thành một nhà phát triển mobile app trên nền tảng Android? Vậy thì đây là khóa học rất phù hợp với bạn, chi phí rẻ, học online tại nhà.
XEM NGAY

Nguồn: freetuts.net