0
点赞
收藏
分享

微信扫一扫

2019年蓝桥杯真题python解答(更新中)

Alex富贵 2022-03-12 阅读 88

1. 后缀表达式

首先要了解什么是后缀表达式:

后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)。

  由于后缀表达式的运算符在两个操作数的后面,那么计算机在解析后缀表达式的时候,只需要从左向右扫描,也就是只需要向前扫描,而不用回头扫描,遇到运算符就将运算符放在前面两个操作符的中间(这里先不考虑乘方类似的单目运算),一直运算到最右边的运算符,那么就得出运算结果了。

后缀表达式是为了方标计算机运算,也就是隐式的含有小括号的一种表达式。有了小括号和减号,我们就可以把加号变成减号,减号变成加号。

对于本题,n个加号,m个减号。

如果m=0,就对所有的数相加即可得到最终结果。

如果m>0,就把数分成三类:

数据全为正:就把最小的那个数减掉,其他剩余的数加上就是最后结果。

数据全为负:就把最大的那个数加上,其他剩下的数减掉(也就是加上绝对值),就是最后结果。

数据有负有正:最后结果就是所有数的绝对值相加。

代码:

n,m=map(int,input().split())
nums=list(map(int,input().split()))
nums.sort()
            
if m==0:
      result=sum(nums)
else:
      if nums[0]>0:
            result=sum(nums[1:len(nums)])-nums[0]
      elif nums[-1]<0:
            result=sum(nums[0:len(nums)-1])*(-1)+nums[-1]
      else:
            absnums=[abs(x) for x in nums]
            result=sum(absnums)

print(result)
            
举报

相关推荐

0 条评论