Cho 4 số nguyên. Tìm số lớn nhất không dùng toán tử điều kiện (if/else/?:) hay bitwise.
Mô tả
Tìm max(a,b,c,d) không dùng if, ?:, &, |, ^, ~, <<, >>.
Ví dụ
Đầu vào: a=4, b=7, c=1, d=9
Đầu ra: 9
Phương pháp giải
So sánh 2 số bằng mảng 2 phần tử và chỉ số boolean:
- Tạo mảng arr[2] = {x, y}
- Chỉ số max = !(arr[0] - arr[1] + abs(arr[0] - arr[1]))
- Nếu arr[0] > arr[1]: hiệu âm + abs dương = 0 → !0 = 1 (true) → arr[1] (sai!)
Sửa lỗi logic: Công thức đúng: `(arr[0] - arr[1] + abs(arr[0] - arr[1])) / (2 * abs(arr[0] - arr[1]))` hoặc đơn giản dùng `(arr[0] < arr[1])` chuyển thành int.
Cách tiếp cận so sánh cặp: max = a; max = findMax(max, b); max = findMax(max, c); max = findMax(max, d).
Chương trình minh họa
#include <iostream>
#include <cstdlib>
using namespace std;
int findMax(int x, int y) {
int arr[2] = {x, y};
bool MaxIndex = (arr[0] < arr[1]); // true=1 nếu y lớn hơn
return arr[MaxIndex];
}
int CalcMaxElement(int a, int b, int c, int d) {
int max = a;
max = findMax(max, b);
max = findMax(max, c);
max = findMax(max, d);
return max;
}
int main() {
int a = 4, b = 9, c = 7, d = 1;
cout << "The maximum of four numbers is " << CalcMaxElement(a, b, c, d);
return 0;
}
Đầu ra: The maximum of four numbers is 9