Mô tả vấn đề
Cho một mảng arr[] gồm n phần tử dương. Nhiệm vụ là tìm phần tử nhỏ nhất không sử dụng các toán tử quan hệ (như ==, >, <, v.v.).
Ví dụ minh họa
Đầu vào:
arr[] = {4, 2, 5, 1, 7}
Đầu ra:
1
Giải thích:
Phần tử nhỏ nhất là 1.
Phương pháp giải quyết
Cách đơn giản: duyệt mảng và tìm phần tử nhỏ nhất. Để so sánh hai số a và b mà không dùng toán tử quan hệ, ta giảm cả hai xuống 1 cho đến khi một trong hai bằng 0. Số trở thành 0 trước là số nhỏ hơn.
Chương trình minh họa
#include <iostream>
using namespace std;
int findMin(int a, int b) {
int minVal = 0;
while (a && b) {
minVal++;
a--;
b--;
}
return minVal;
}
int findMinimumElement(int arr[], int n) {
int minVal = arr[0];
int i = n - 1;
while (i) {
minVal = findMin(minVal, arr[i]);
i--;
}
return minVal;
}
int main() {
int arr[] = {4, 2, 5, 1, 7};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Phần tử nhỏ nhất là " << findMinimumElement(arr, n);
return 0;
}
Kết quả đầu ra
Phần tử nhỏ nhất là 1