Trong bài toán này, cho mảng arr[] gồm n số nguyên. Nhiệm vụ là viết chương trình tìm phần tử nhỏ nhất và lớn nhất của mảng trong C++.
Mô tả bài toán
Cho mảng arr[] chứa n giá trị nguyên. Cần tìm giá trị lớn nhất và nhỏ nhất trong tất cả các phần tử của mảng.
Ví dụ minh họa
Đầu vào: arr[] = {2, 1, 6, 9, 4, 10, 15, 21}
Đầu ra: max = 21, min = 1
Phương pháp giải
Có nhiều cách giải quyết bài toán này:
Cách 1: So sánh trực tiếp (Iterative)
Duyệt qua mảng, so sánh từng phần tử với max và min hiện tại.
#include <iostream>
using namespace std;
void getMinMax(int arr[], int N) {
int max = arr[0], min = arr[0];
for(int i = 1; i < N; i++) {
if(max < arr[i]) max = arr[i];
if(min > arr[i]) min = arr[i];
}
cout << "Maximum Value = " << max << "\n";
cout << "Minimum Value = " << min;
}
int main() {
int arr[] = {2, 1, 6, 9, 4, 10, 15, 21};
int N = 8;
getMinMax(arr, N);
return 0;
}
Đầu ra: Maximum Value = 21, Minimum Value = 1
Cách 2: Đệ quy (Recursive)
Gọi đệ quy để tìm max/min của n-1 phần tử đầu, so sánh với phần tử cuối.
#include <iostream>
using namespace std;
int CalcMinValue(int arr[], int n) {
return (n == 1) ? arr[0] : min(arr[n-1], CalcMinValue(arr, n-1));
}
int CalcMaxValue(int arr[], int n) {
return (n == 1) ? arr[0] : max(arr[n-1], CalcMaxValue(arr, n-1));
}
int main() {
int arr[] = {2, 1, 6, 9, 4, 10, 15, 21};
int N = 8;
cout << "Maximum Value = " << CalcMaxValue(arr, N) << endl;
cout << "Minimum Value = " << CalcMinValue(arr, N);
return 0;
}
Đầu ra: Maximum Value = 21, Minimum Value = 1
Cách 3: Sử dụng thư viện STL
Sử dụng min_element() và max_element() từ <bits/stdc++.h>.
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = {2, 1, 6, 9, 4, 10, 15, 21};
int N = 8;
cout << "Maximum Value = " << (*max_element(arr, arr+N)) << endl;
cout << "Minimum Value = " << (*min_element(arr, arr+N));
return 0;
}
Đầu ra: Maximum Value = 21, Minimum Value = 1