Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình kiểm tra mảng đối xứng (Palindrome) bằng STL trong C++


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ụ:

Chương trình kiểm tra mảng đối xứng (Palindrome) bằng STL trong C++

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