โจทย์
ได้รับจำนวนเต็มไม่เป็นศูนย์ 3 จำนวน a, b, c งานคือหาค่าสูงสุดที่เป็นไปได้โดยวางเครื่องหมายบวกและคูณระหว่างพวกเขาในลำดับใดก็ได้
โปรดสังเกตว่าการจัดเรียงตัวเลขใหม่ได้ แต่เครื่องหมายบวกและคูณต้องใช้ครั้งละ 1 ครั้ง
ถ้า a = 1, b = 3, c = 5 ค่าสูงสุดคือ 20 ดังนี้
(1 + 3) * 5 = 20
อัลกอริทึม
1. ถ้าตัวเลขทั้งหมดเป็นบวก บวก 2 ตัวเล็ก คูณกับตัวใหญ่สุด 2. ถ้ามี 2 ตัวบวก คูณ 2 ตัวบวก บวกตัวที่เหลือ 3. ถ้ามี 1 ตัวบวก คูณ 2 ตัวลบ บวกตัวที่เหลือ 4. ถ้าทั้งหมดเป็นลบ บวก 2 ตัวใหญ่สุด (น้อยที่สุดในค่าลบ) คูณกับตัวที่เหลือ
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int getMaximumResult(int a, int b, int c) {
int negativeCnt = 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) ++negativeCnt;
if (b < 0) ++negativeCnt;
if (c < 0) ++negativeCnt;
if (negativeCnt == 0) {
return (sum - largest) * largest;
} else if (negativeCnt == 1) {
return (mul / smallest) + smallest;
} else if (negativeCnt == 2) {
return (mul / largest) + largest;
} else if (negativeCnt == 3) {
return (sum - smallest) * smallest;
}
}
int main() {
int a = 1, b = 3, c = 5;
cout << "Maximum value = " << getMaximumResult(a, b, c) << endl;
return 0;
}
ผลลัพธ์
Maximum value = 20