3
Làm sao để đảo ngược mảng 1 chiều các số nguyên trong C/C++?
1
Hữu Thiện30 đã đăng:

thêm bình luận...
3
Khánh Hải40 đã đăng:

Một cách khác không cần tạo ra mảng mới tmp mà là hoán vị trực tiếp từng cặp phần tử trên mảng thông qua vị trí trung tâm của nó, ví dụ ta có mảng A là {1, 2, 3, 4, 5}.

Vị trí trung tâm là số 3, ta cho một vòng lặp i chạy từ số 1 tới số 3 và một vòng lặp j chạy từ số 5 tới số 3, mỗi lần chạy, ta hoán đổi vị trí của chúng với nhau, vì 3 là số trung tâm nên 3 không cần hoán đổi, kết quả ta được một mảng số nguyên đã được đảo ngược.

Đoạn mã nguồn minh họa cho ý tưởng của mình.

#include <iostream>
using namespace std;

void hoanVi2So(int &a, int &b) {
    int tmp = a;
    a = b;
    b = tmp;
}

void daoNguocMang(int *&A, int n) {
    int middle = n / 2;

    int j = n - 1;
    for (int i = 0; i < middle; i++) {
        hoanVi2So(A[i], A[j]);
        j--;
    }
}

int main()
{
    int *A;
    int n;

    cout << "Nhap vao so luong phan tu n = ";
    cin >> n;

    // Cấp phát bộ nhớ
    A = new int[n];

    // Nhập mảng
    for (int i = 0; i < n; i++) {
        cout << "Nhap vao phan tu A[" << i << "] = ";
        cin >> A[i];
    }

    // Gọi hàm đảo ngược mảng
    daoNguocMang(A, n);

    // Xuất mảng kết quả ra màn hình.
    for (int i = 0; i < n; i++) {
        cout << A[i] << "   ";
    }

    delete[]A;
}
thêm bình luận...
1
trungkfc02570 đã đăng:

Mình nghĩ cách đơn giản nhất là tạo ra một mảng mới gọi là tmp, sau đó duyệt mảng A bắt đầu từ vị trí cuối mảng, tức là tại vị trí n - 1 về lại đầu mảng, tức là vị trí 0, với mỗi phần tử đi qua ở mảng A, sao chép nó qua mảng tmp, đồng thời tăng chỉ số của mảng tmp để chuẩn bị cho việc lưu một phần tử tiếp theo.

#include <stdio.h>

int* daoNguocMang(int *A, int n) {
    int *tmp = new int[n]; // Tạo 1 mảng tạm

    int j = 0;
    // Duyệt ngược mảng A, bắt đầu từ phần tử cuối
    // Mỗi lần duyệt, lưu từng phần tử duyệt được vào mảng tạm
    for (int i = n - 1; i >= 0; i--) {
        tmp[j] = A[i];
        j++;
    }
    return tmp;
}

void printArr(int *A, int n) {
    for (int i = 0; i < n; i++) {
        printf("%5d", A[i]);
    }
}

int main()
{
    int A[] = { 1, 2, 3, 4, 5, 6 }; // Ví dụ một mảng số nguyên cố định có 6 phần tử
    int n = sizeof(A) / sizeof(int); // Một cách đơn giản để tính n = 6

    // Gọi hàm đảo ngược mảng
    int *kq = daoNguocMang(A, n);

    // Xuất mảng kết quả ra màn hình.
    printArr(kq, n);
}
thêm bình luận...
0
Cộng đồng đã đăng:

Đảo ngược mảng trong C++ là xử lý viết lại một mảng với các phần tử theo thứ tự ngược lại từ cuối lên đầu. Lưu ý ở đây mảng là mảng số, do đó chúng ta cũng có thể gọi xử lý này là đảo ngược dãy số trong C++. Chương trình mẫu đảo ngược mảng 1 chiều các số nguyên trong C++ tại: Đảo ngược mảng trong C++

thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)