Chúng ta được cung cấp một mảng các số nguyên. Nhiệm vụ là tìm phần tử nhỏ nhất và lớn nhất của mảng với số lần so sánh tối thiểu.
Ví dụ
Đầu vào
Arr[] = { 1, 2, 4, 5, -3, 91 }
Đầu ra
Phần tử lớn nhất: 91 Phần tử nhỏ nhất: -3
Giải thích - Để giảm thiểu số lần so sánh, chúng ta khởi tạo giá trị lớn nhất và nhỏ nhất bằng Arr[0]. Sau đó, bắt đầu từ phần tử thứ 2, so sánh từng giá trị với min và max và cập nhật tương ứng.
Đầu vào
Arr[] = { 10, 20, 21, 31, 18, 11 }
Đầu ra
Phần tử lớn nhất: 31 Phần tử nhỏ nhất: 10
Giải thích - Tương tự, khởi tạo max và min bằng Arr[0], sau đó duyệt từ phần tử thứ 2 để so sánh và cập nhật.
Phương pháp sử dụng
- Nhận mảng số nguyên Arr[]
- Hàm
getresult(int arr[], int n)tìm max và min với số so sánh tối thiểu - Nếu chỉ có 1 phần tử, gán max = min = arr[0]
- Nếu có nhiều hơn 1 phần tử, so sánh arr[0] và arr[1] để khởi tạo max và min
- Duyệt từ phần tử thứ 3 (i=2) đến cuối mảng
- So sánh từng arr[i] với min và max, cập nhật nếu cần
- In kết quả lưu trong max và min
Chương trình mẫu
#include <stdio.h>
int getresult(int arr[], int n) {
int min = 0, max = 0;
if (n == 1) {
min = max = arr[0];
} else {
if (arr[0] > arr[1]) {
max = arr[0];
min = arr[1];
} else {
max = arr[1];
min = arr[0];
}
for (int i = 2; i < n; i++) {
if (arr[i] > max)
max = arr[i];
else if (arr[i] < min)
min = arr[i];
}
}
printf("Phần tử nhỏ nhất: %d\n", min);
printf("Phần tử lớn nhất: %d\n", max);
}
int main() {
int arr[] = {200, 191, 112, -11, 330, 60};
int n = 6;
getresult(arr, n);
return 0;
}
Kết quả
Phần tử nhỏ nhất: -11 Phần tử lớn nhất: 330