解题思路

这是一个表达式求值问题。关键点如下:

  1. 给定三个数
  2. 可以在数字之间添加 "+", "*", "(", ")" 符号
  3. 需要求出所有可能表达式中的最大值

解题思路:

  1. 由于只有三个数,可能的组合是有限的
  2. 主要考虑两种情况:
    • 全部相乘:
    • 两数相加再乘以第三个数:
  3. 对于每种排列,比较这两种计算方式的结果,取较大值

代码

#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)

算法及复杂度

  • 算法:贪心
  • 时间复杂度: - 只需要固定次数的比较操作
  • 空间复杂度: - 只使用常数额外空间