Cho mảng arr[n] gồm n số nguyên, nhiệm vụ là xác định xem mảng có phải là palindrome (đối xứng) hay không. Yêu cầu sử dụng STL (Standard Template Library) trong C++.
STL trong C++ là tập hợp các lớp mẫu cung cấp cấu trúc dữ liệu và các hàm như stack, queue, list, v.v. Để sử dụng cần hiểu về template class.
Palindrome là chuỗi đọc từ đầu đến cuối hoặc ngược lại đều giống nhau. Ví dụ: MADAM, RACECAR. Mảng đối xứng ví dụ:

Nhiệm vụ: kiểm tra mảng có đối xứng không bằng STL, in "là mảng đối xứng" nếu đúng, ngược lại in "không phải mảng đối xứng".
Đầu vào 1
arr[] = {1, 2, 3, 5, 3, 2, 1}
Đầu ra 1
là mảng đối xứng
Đầu vào 2
arr[] = {1, 2, 3, 4, 5}
Đầu ra 2
không phải mảng đối xứng
Phương pháp tiếp cận
- Khởi tạo flag = 0
- Duyệt mảng từ i = 0 đến n/2
- Nếu arr[i] != arr[n-i-1] thì flag = 1 và thoát vòng lặp
- Sau vòng lặp: nếu flag = 0 in "là mảng đối xứng", ngược lại in "không phải mảng đối xứng"
Thuật toán
Bước 1 → Khai báo hàm kiểm tra palindrome:
void kiemTraPalindrome(int arr[], int size) {
int flag = 0;
int arr_2[size];
memcpy(arr_2, arr, size * sizeof(int));
reverse(arr, arr + size);
for (int i = 0; i < size; i++) {
if (arr[i] != arr_2[i]) {
flag = 1;
break;
}
}
if (flag == 0)
cout << "là mảng đối xứng\n";
else
cout << "không phải mảng đối xứng\n";
}
Bước 2 → Trong main():
int arr[] = {2, 3, 4, 3, 2};
int size = sizeof(arr) / sizeof(arr[0]);
kiemTraPalindrome(arr, size);
Ví dụ mã nguồn
#include <bits/stdc++.h>
using namespace std;
void kiemTraPalindrome(int arr[], int size) {
int flag = 0;
int arr_2[size];
memcpy(arr_2, arr, size * sizeof(int));
reverse(arr, arr + size);
for (int i = 0; i < size; i++)
if (arr[i] != arr_2[i]) {
flag = 1;
break;
}
if (flag == 0)
cout << "là mảng đối xứng\n";
else
cout << "không phải mảng đối xứng\n";
}
int main() {
int arr[] = {2, 3, 4, 3, 2};
int size = sizeof(arr) / sizeof(arr[0]);
kiemTraPalindrome(arr, size);
return 0;
}
Kết quả chạy chương trình
là mảng đối xứng