Cho một mảng hoặc chuỗi ký tự. Tạo chương trình đảo ngược thứ tự phần tử của mảng hoặc chuỗi.
Ví dụ:
Input
mảng = {2, 5, 7, 1, 9}
Output
{9, 1, 7, 5, 2}
Input
chuỗi = "Hello!"
Output
!olleH
Cách làm: dùng hai biến start và end, hoán đổi phần tử tại hai vị trí, tăng start, giảm end. Lặp cho đến khi start >= end.
Có hai cách: lặp (iterative) và đệ quy (recursive).
Phương pháp 1: Lặp (Iterative)
#include <iostream>
using namespace std;
void revereseArrayIt(int arr[], int start, int end) {
while (start < end) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
int main() {
int arr[] = {6, 9, 1, 4, 0, 5};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Mảng gốc: ";
for (int i = 0; i < n; i++) cout << arr[i] << " ";
cout << endl;
revereseArrayIt(arr, 0, n-1);
cout << "Mảng đã đảo: ";
for (int i = 0; i < n; i++) cout << arr[i] << " ";
cout << endl;
return 0;
}
Kết quả
Mảng gốc: 6 9 1 4 0 5
Mảng đã đảo: 5 0 4 1 9 6
Phương pháp 2: Đệ quy (Recursive)
#include <iostream>
using namespace std;
void revereseArrayRec(int arr[], int start, int end) {
if (start >= end)
return;
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
revereseArrayRec(arr, start+1, end-1);
}
int main() {
int arr[] = {6, 9, 1, 4, 0, 5};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Mảng gốc: ";
for (int i = 0; i < n; i++) cout << arr[i] << " ";
cout << endl;
revereseArrayRec(arr, 0, n-1);
cout << "Mảng đã đảo: ";
for (int i = 0; i < n; i++) cout << arr[i] << " ";
cout << endl;
return 0;
}
Kết quả
Mảng gốc: 6 9 1 4 0 5
Mảng đã đảo: 5 0 4 1 9 6