Trong bài toán này, chúng ta được cung cấp một mảng arr[] kích thước n chứa các giá trị dương. Nhiệm vụ là tìm giá trị lớn nhất trong mảng mà không sử dụng các toán tử quan hệ.
Ví dụ minh họa:
Đầu vào: arr[] = {5, 1, 6, 7, 8, 2}
Đầu ra: 8
Phương pháp giải quyết
Vì cần so sánh giá trị mà không dùng toán tử logic, ta thực hiện phép trừ lặp lại: số nào "sống sót" lâu hơn sẽ là số lớn hơn.
Ta giảm dần tất cả các giá trị đi 1 cho đến khi chúng bằng 0. Bắt đầu từ hai phần tử đầu tiên của mảng để tìm giá trị lớn hơn giữa chúng. Sau đó so sánh phần tử lớn nhất hiện tại với các phần tử còn lại của mảng. Cách này giúp tìm được giá trị lớn nhất của tất cả các phần tử.
Chương trình minh họa
Ví dụ
#include <iostream>
using namespace std;
int returnMax(int x, int y) {
int c = 0;
while (x || y) {
if (x) x--;
if (y) y--;
c++;
}
return c;
}
int findMaxEle(int A[], int N) {
int maxVal = A[0];
for (int i = N - 1; i; i--)
maxVal = returnMax(maxVal, A[i]);
return maxVal;
}
int main() {
int A[] = {5, 1, 6, 7, 8, 2};
int N = sizeof(A) / sizeof(A[0]);
cout << "The maximum element of the array is " << findMaxEle(A, N);
return 0;
}
Kết quả
The maximum element of the array is 8