解题思路
这是一个表达式求值问题。关键点如下:
- 给定三个数
- 可以在数字之间添加 "+", "*", "(", ")" 符号
- 需要求出所有可能表达式中的最大值
解题思路:
- 由于只有三个数,可能的组合是有限的
- 主要考虑两种情况:
- 全部相乘:
- 两数相加再乘以第三个数:
或
等
- 全部相乘:
- 对于每种排列,比较这两种计算方式的结果,取较大值
代码
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
int result;
if (a > b) {
if (a > c) { // a最大
result = max(a * b * c, (b + c) * a);
} else { // c最大
result = max(a * b * c, (a + b) * c);
}
} else {
if (b > c) { // b最大
result = max(a * b * c, (a + c) * b);
} else { // c最大
result = max(a * b * c, (a + b) * c);
}
}
cout << result << endl;
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int result;
if (a > b) {
if (a > c) { // a最大
result = Math.max(a * b * c, (b + c) * a);
} else { // c最大
result = Math.max(a * b * c, (a + b) * c);
}
} else {
if (b > c) { // b最大
result = Math.max(a * b * c, (a + c) * b);
} else { // c最大
result = Math.max(a * b * c, (a + b) * c);
}
}
System.out.println(result);
}
}
a, b, c = map(int, input().split())
if a > b:
if a > c: # a最大
result = max(a * b * c, (b + c) * a)
else: # c最大
result = max(a * b * c, (a + b) * c)
else:
if b > c: # b最大
result = max(a * b * c, (a + c) * b)
else: # c最大
result = max(a * b * c, (a + b) * c)
print(result)
算法及复杂度
- 算法:贪心
- 时间复杂度:
- 只需要固定次数的比较操作
- 空间复杂度:
- 只使用常数额外空间