首页 > 试题广场 >

表达式求值

[编程题]表达式求值
  • 热度指数:25472 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
今天上课,老师教了小易怎么计算加法和乘法,乘法的优先级大于加法,但是如果一个运算加了括号,那么它的优先级是最高的。例如:
1+2*3=7
1*(2+3)=5
1*2*3=6
(1+2)*3=9
现在小易希望你帮他计算给定3个数a,b,c,在它们中间添加"+", "*", "(", ")"符号,能够获得的最大值。

输入描述:
一行三个数a,b,c (1 <= a, b, c <= 10)


输出描述:
能够获得的最大值
示例1

输入

1 2 3

输出

9
将本题推广到n个数,采用动态规划解法
给出我的一维动态规划代码
dp[i]表示前i 个数中构成最大的数
写出转化方程:
dp[i] = max(nums[i]*dp[i-1], nums[i]+dp[i-1], dp[i-2]*(nums[i]+nums[i-1]))
如有不对的地方,还请多指正!
输入格式: 第一行输入数字的个数n 第二行输入数字数组a1,a2,...,an def solution(nums, n):     dp = [0]*(n)     dp[0], dp[1] = nums[0], max(nums[0]+nums[1], nums[0]*nums[1])     for i in range(2, n):         dp[i] = max(nums[i]*dp[i-1], nums[i]+dp[i-1], dp[i-2]*(nums[i]+nums[i-1]))     return dp[-1] if __name__ == '__main__':     while 1:         n = int(input().strip())         nums = list(map(int, input().strip().split()))         print(solution(nums, n))        

编辑于 2020-06-15 14:11:59 回复(4)
a,b,c = map(int, input().split())
result = max(a+b+c, a*b*c, a*b+c, a+b*c, (a+b)*c, a*(b+c))
print(result)
这东西不就6种组合,直接遍历。。。会不会被批没有技术含量
发表于 2020-04-10 17:42:05 回复(0)
Python两行足矣
总共就6种情况 直接暴力呗
a, b, c = [int(x) for x in input().strip().split(" ")]
print(max([a+b+c, a*b*c, a+b*c, a*b+c, (a+b)*c, a*(b+c)]))


发表于 2019-12-03 11:12:50 回复(3)
将三个数排序,最后一个最大的数与前面一定是乘法关系
比较前俩个数和与积的大小关系
class number:
    def max_num(self):
        a , b , c = map(int,input().split())
        lst = [a,b,c]
        lst.sort()
        i , j , k= lst[0] , lst[1] , lst[2]
        if i + j <= i * j:
            return i*j*k
        else:
            return (i+j)*k
if __name__ == "__main__":
    a = number()
    print(a.max_num())
发表于 2019-10-28 10:16:17 回复(0)
import sys
a, b, c = sorted(map(int, sys.stdin.readline().strip().split()))

if c == 1:
    print(3)
elif b == 1:
    print(2 * c)
elif a == 1:
    print((1 + b) * c)
else:
    print(a * b * c)
编辑于 2019-09-13 22:39:56 回复(0)
def max_(a,b,c):
    if a==1 and b==1 and c==1:
        return a+b+c
    elif a == 1:
        return (a+b)*c
    else:
        return a*b*c
a,b,c = sorted(map(int,input().split()))
print(max_(a,b,c))
发表于 2019-09-12 13:33:42 回复(0)
import sys
arr=list(map(int,sys.stdin.readline().split()))
arr.sort()
if arr[0]==1:
    print((arr[0]+arr[1])*arr[2])
else:
    print(arr[0]*arr[1]*arr[2])


发表于 2019-08-14 11:15:33 回复(2)
def fun():
    a,b,c = list(map(int, input().split()))
    
    M = max(a+b, a*b)
    if c== 1:
        return M + c
    else:
        return M * c

发表于 2019-08-03 11:08:53 回复(2)
思路:最大的数乘以剩下两个数的和或者乘积:
lis = list(map(int, input().split()))
a = max(lis)
lis.remove(a)
if lis[0] + lis[1] > lis[0]*lis[1]:
    print(a*(lis[0] + lis[1]))
else:
    print(a*(lis[0] * lis[1]))

编辑于 2019-08-01 21:57:09 回复(0)

推广到 n 个数

dp[i[[j] 代表 index 从 i 到 j (包含 i 和 j)中的最大值

所以:

dp[i][j] = max(dp[i][k] + dp[k+1][j],dp[i][k] * dp[k+1][j])for i <=k < j

        nums = list(map(int,input().strip().split()))

        dp = [[0]*len(nums) for i in range(len(nums))]

        for i in range(len(dp)-1,-1,-1):
            for j in range(len(dp[0])):
                if i == j:
                    dp[i][j] = nums[i]
                else:
                    for k in range(i,j):
                        dp[i][j] = max([dp[i][k] + dp[k+1][j],dp[i][k] * dp[k+1][j],dp[i][j]])

        # print(dp)
        print(dp[0][len(nums)-1])
编辑于 2019-07-31 17:51:50 回复(7)
while True:
    try:
        arr = [int(elem) for elem in input().split()]
        a = arr[0]
        b = arr[1]
        c = arr[2]
        k = max(a+b+c, (a+b)*c, (a+c)*b, (b+c)*a, a*b*c)
        print(k)
    except:
        break
发表于 2019-07-24 22:38:42 回复(1)
from functools import reduce

nums = list(map(int, input().split()))
nums.sort()
print(max((nums[0] + nums[1]) * nums[2], reduce(lambda a, b: a * b, nums)))
编辑于 2019-07-11 17:34:56 回复(0)
a, b, c = sorted(map(int, input().split()))
if a == 1 or a == 0:
    print((a + b) * c)
else:
    print(a * b * c)

发表于 2019-07-04 11:18:30 回复(0)
"""
罗列所有可能求最大值
"""

if __name__ == "__main__":
    a, b, c = list(map(int, input().strip().split()))
    p = [a + b + c, a * b + c, a * (b + c), a + b * c, (a + b) * c, a * b * c]
    print(max(p))

发表于 2019-07-03 17:25:12 回复(0)
a, b, c = map(int, input().split()) # 2*2*2 八种组合 results = [] # 存储八个结果 results.append(eval("{}+{}+{}".format(a, b, c)))
results.append(eval("{}*{}*{}".format(a, b, c)))
results.append(eval("{}+{}*{}".format(a, b, c)))
results.append(eval("{}*{}+{}".format(a, b, c)))
results.append(eval("({}+{})*{}".format(a, b, c)))
results.append(eval("{}+({}*{})".format(a, b, c))) print(max(results))


发表于 2019-07-02 11:28:22 回复(0)
input1 = raw_input()
list1 = input1.split(' ')
for i in range(0,len(list1)):
    list1[i] = int(list1[i])
max_num = 0
for j in range(0,len(list1)):
    add_num = list1[0] + list1[1]
    res1 = add_num * list1[2]
    if max_num < res1:
        max_num = res1
    res2 = list1[0] * list1[1]* list1[2]
    if max_num < res2:
        max_num = res2
    temp = list1[0]
    list1.remove(list1[0])
    list1.append(temp)

print(max_num)

发表于 2019-07-01 20:31:02 回复(0)