Thứ Tư, 28 Tháng Chín 2022
Trang chủLập trìnhLập trình C/C++Kiểm tra mảng đối xứng trong lập trình C/C++

Kiểm tra mảng đối xứng trong lập trình C/C++

Kiểm tra đối xứng là một dạng bài tập hay dành cho việc luyện tập lập trình C/C++, đây là bài tập lập trình đơn giản dành cho người bắt đầu, tuy nhiên độ hiệu quả thì tướng đối tốt.

Kiểm tra mảng đối xứng trong lập trình C/C++

Trước tiên nói một chút về mảng đối xứng là mảng như thế nào, thì đơn giản mảng đối xứng là mảng có các phần tử trong mảng đối xứng qua trục giữa sẽ luôn bằng nhau.

Đối với mảng có số lượng phần tử chẵn, ta sẽ chia mảng ra làm 2 đoạn đúng bằng nhau và trục sẽ cắt ngang giữa 2 đoạn…ta sẽ lấy từng cặp đối xứng qua trục.

Kiểm tra mảng đối xứng trong lập trình C/C++

Đối với mảng có số phần tử lẻ, phần tử nằm ở giữa sẽ là trục, phần tử này ta không cần so sánh đối xứng hoặc só sánh thì sẽ so sánh với chính nó.

Kiểm tra mảng đối xứng trong lập trình C/C++

Vậy ý tưởng của bài toán sẽ như sau, Ta sẽ duyệt vòng lặp ở phía nửa bên trái của mảng sau đó so sánh với phần tử đối xứng bên phải mảng. Nếu tất cả các cặp số đều bằng nhau thì kết luận mảng là đối xứng, ngược lại kết luận mảng không đối xứng.

Ta viết chương trình C như sau:

#include <stdio.h>
#include <stdbool.h>

//Hàm kiểm tra mảng đối xứng
bool checkDoiXung(int n, int A[]){
	int i;
//Duyệt 1 nửa mảng phia bên trái
	for(i = 0;i<n/2;i++){
//Lấy phần tử thứ i phía bên trái mảng so sánh phần tử đối xứng bên phải mảng nếu có 1 cặp khác nhau ta kết luận luôn là mảng không đối xứng
		if(A[i] != A[n-i-1]) return false; //A[n-i-1] là để lấy phần tử đối xứng qua trục
	}
	
	return true; //Duyệt hết vòng lặp không tìm được cặp số  đối xứng nào khác nhau thì mảng này đối xứng nhau
}
int main()
{
	int n;
	printf("Nhap so phan tu: ");
	scanf("%d,",&n);
	int A[n];
	
	int i;
	for(i = 0; i<n;i++){
		printf("A[%d] = ",i);
		scanf("%d", &A[i]);
	}
	
	printf("\n\nMang vua nhap:\n");
	
	for(i = 0; i<n;i++){
		printf("%d  ", A[i]);
	}
	
	if(checkDoiXung(n, A)) printf("\n\n =>Mang vua nhap doi xung nhau");
	else printf("\n\n =>Mang vua nhap khong doi xung nhau");
}

Nếu cảm thấy hàm trên khó hiểu hơn 1 chút thì mình viết lại hàm kiểm tra đối xứng như sau, tuy nhiên khuyến khích viết code theo cách trên.

#include <stdio.h>
#include <stdbool.h>

bool checkDoiXung(int n, int A[]){
	int i;
	int dem = 0;
	for(i = 0;i<n;i++){
		if(A[i] != A[n-i-1]){
		  dem++;
		}
	}
	if(dem == 0) printf("\n\nMang doi xung nhau");
	else printf("\n\nMang khong doi xung nhau");
}
int main()
{
	int n;
	printf("Nhap so phan tu: ");
	scanf("%d,",&n);
	int A[n];
	
	int i;
	for(i = 0; i<n;i++){
		printf("A[%d] = ",i);
		scanf("%d", &A[i]);
	}
	
	printf("\n\nMang vua nhap:\n");
	
	for(i = 0; i<n;i++){
		printf("%d  ", A[i]);
	}
	
	checkDoiXung(n, A);
}

Chuyển đổi thành chương trình C++.

#include <iostream>

using namespace std;

bool checkDoiXung(int n, int A[]){
	for(int i = 0;i<n/2;i++){
		if(A[i] != A[n-i-1]) return false; 
	}
	return true; 
}
int main()
{
	int n;
	cout<<"Nhap so phan tu: ";
	cin>>n;
	int A[n];
	
	int i;
	for(i = 0; i<n;i++){
		cout<<"A["<<n<<"] = ";
		cin>>A[i];
	}
	
	cout<<"\nMang vua nhap:\n";
	
	for(i = 0; i<n;i++){
		cout<<A[i]<<"  ";
	}
	
	if(checkDoiXung(n, A)) cout<<"\n\n =>Mang vua nhap doi xung nhau";
	else cout<<"\n\n =>Mang vua nhap khong doi xung nhau";
}

[Xem tất cả bài viết chủ đề C/C++ tại đây]

0 0 Phiếu bình chọn
Xếp hạng bài viết
BÀI VIẾT LIÊN QUAN
Đăng ký nhận thông báo
Thông báo email khi
guest
0 Bình luận
Không thể gửi email
Phản hồi nội tuyến

NÊN ĐỌC THÊM

Bạn muốn tìm kiếm gì?


0
Giáo sư! có thể ném gạch bên dưới nhé!x
()
x