Hàm kiểm tra mảng đối xứng trong C++

kiem tra tinh doi xung cua mang mot chieu

Bài số 20 hàm kiểm tra số đối xứng trong C/C++. Ở bài viết này, mình sẽ hướng dẫn các bạn cách giải bài tập này. Nó rất hay và bổ ích, hãy cố gắng làm nó nhé!

1.Giới thiệu bài toán

Kiểm tra đối xứng là một dạng bài tập hay dành do việc luyện tập lập trình C/C++. Nó 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ả mả nó mang lại rất lớn.

Đề bài:

Viết hàm kiểm tra mảng a có n phần tử có phải là mảng đối xứng hay không?

Mình sẽ viết hàm in ra màn hình kết quả đúng hay sai trong trường hợp này.

2. Giải quyết bài toán

Bài tập đòi hỏi người làm nắm được kiến thức cơ bản về ngôn ngữ lập trình mình đang học. Hiểu được cách sử dụng vòng for và cách làm việc với mảng là có thể giải quyết được.

2.1 Ý tưởng giải bài toán

Trước tiên, bạn cần hiểu mảng đối xứng là như thế nào.

Mảng đối xứng tức là các phần tử trong mảng đối xứng nhau qua giữa mảng sẽ bằng nhau.

Ví dụ:

Mảng đối xứng: 1 2 3 4 3 2 1

Mảng không đối xứng : 1 2 3 4 5

Ý tưởng giải quyết, mình sẽ sử dụng một vòng lặp for chạy tử đầu mảng đến cuối mảng và so sánh phần tử a[i] với phần tử a[n-1-i]. Vòng lặp for của mình chạy từ 0.

Nếu so sánh gặp trường hợp không bằng nhau tức là a[i] !=a[n-1-i] tức là mảng không đối xứng!

Mình sẽ dùng một biến dem trung gian để kiểm tra.

2.2 Hàm kiểm tra tính đối xứng của mảng

Với ý tưởng đưa ra ở phần trên, cách giải của mình như sau:

void Checkopposite(int a[], int n){
	int dem=0;
	for(int i=0;i<n;i++){
		if(a[i]!=a[n-1-i])
			dem++;
	}
	if(dem==0)
		cout<<"\nMang doi xung"<<endl;
	else
		cout<<"\nMang khong doi xung"<<endl;
}

Bạn có thể tùy chỉnh cách in ra màn hình. Hoặc tùy chỉnh kiểu trả về giá trị của màng (return cái gì đó) với ý tưởng gợi ý của mình.

2.3 Chương trình kiểm tra tính đối xứng của mảng

Để có chương trình hoàn chỉnh, mình thêm phần nhập xuất mảng để làm việc với mảng. Một số cấu trúc mặc định của một chương trình C/C++

Xem cấu trúc nhập xuất mảng tại đây.

Code C++:

#include<bits/stdc++.h>
using namespace std;
void nhap(int a[], int &amp;n){
	do{
		cout<<("Nhap n: ");
		cin>>n;
	}
	while(n<2||n>99);
	for(int i=0; i<n; i++){
		cout<<"a["<<i<<"]: ";
		cin>>a[i];
	}
}

void xuat(int a[], int n){
	for(int i=0;i<n;i++){
		cout<<"  "<<a[i];
	}
}


void Checkopposite(int a[], int n){
	int dem=0;
	for(int i=0;i<n;i++){
		if(a[i]!=a[n-1-i])
			dem++;
	}
	if(dem==0)
		cout<<"\nMang doi xung"<<endl;
	else
		cout<<"\nMang khong doi xung"<<endl;
}
int main(){
	int a[100];
	int n;
	nhap(a,n);
	cout<<"Ket qua"<<endl;
	Checkopposite(a,n);
	return 0;
}

Kết quả chạy chương trình.

Trường hợp mảng không đối xứng:

kiem tra mang doi xung 1

Trường hợp mảng đối xứng:

kiem tra mang doi xung 2

Bài viết của mình đến đây là hết, cảm ơn bạn đã quan tâm bài viết. Đừng bỏ lỡ những bài tiếp theo nhé!

Xem tiếp bài 21: Tách mảng trong C/C++

Xem lại bài 19: Tìm phần tử xuất hiện nhiều nhất trong mảng

Tải về 67 bài tập đề cương lập trình C/C++

Rất mong nhận được ý kiến đóng góp từ phía bạn đọc để bài viêt của mình hoàn thiện hơn.

LEAVE A REPLY

Please enter your comment!
Please enter your name here