Đề bài
Cho ba số nguyên a, b, c khác 0. Chèn một phép cộng và một phép nhân (mỗi phép đúng một lần) và cho phép hoán vị ba số để giá trị biểu thức lớn nhất.
Ví dụ: a=1, b=3, c=5 → max = (1+3)*5 = 20.
Thuật toán (Dựa trên dấu của các số)
- Đếm số lượng số âm (
negCnt). - Tất cả dương (0 âm): Cộng hai số nhỏ nhất, nhân với số lớn nhất.
- Một số âm (1 âm): Nhân hai số dương, cộng số âm.
- Hai số âm (2 âm): Nhân hai số âm (được dương), cộng số dương.
- Ba số âm (3 âm): Cộng hai số lớn nhất (gần 0 nhất), nhân với số nhỏ nhất (âm nhiều nhất).
Ví dụ minh họa (C++)
#include <bits/stdc++.h>
using namespace std;
int getMaximumResult(int a, int b, int c) {
int negCnt = 0;
int sum = a + b + c;
int mul = a * b * c;
int largest = max(a, max(b, c));
int smallest = min(a, min(b, c));
if (a < 0) ++negCnt;
if (b < 0) ++negCnt;
if (c < 0) ++negCnt;
if (negCnt == 0) return (sum - largest) * largest;
else if (negCnt == 1) return (mul / smallest) + smallest;
else if (negCnt == 2) return (mul / largest) + largest;
else return (sum - smallest) * smallest; // negCnt == 3
}
int main() {
int a = 1, b = 3, c = 5;
cout << "Gia tri lon nhat = " << getMaximumResult(a, b, c) << endl;
return 0;
}
Kết quả
Gia tri lon nhat = 20