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)
2. 平方和
这个题就很简单,暴力求解。
代码:
r=0
for i in range(1,2020):
for j in str(i):
if j in ['2','0','1','9']:
r=r+i**2
break
print(r)
答案:2658417853
3. 数列求值
本题也很简单,暴力求解。
代码:
l=[1,1,1]
for i in range(20190321):
mm=sum(l)%10000
l[0]=l[1]
l[1]=l[2]
l[2]=mm
print(l[2])
答案:4659
答案:34
5. 迷宫
6. RSA解密
7. 完全二叉树的权值
注意:完全二叉树和满二叉树是不一样的,我先把完全二叉树通过补0变成满二叉树然后再进行计算。代码中的depth的根据输入的数N算出的完全二叉树的深度,mm使深度为depth的满二叉树所拥有的节点数。因此对于输入的权重列表(样例输入的第二行的数)需要增加mm-depth个0,才会变成满二叉树
代码:
import math
n=int(input())
num=list(map(int,input().split()))
haha=0
sumh=0
result=1
depth=int(math.log(n+1,2))+1
#print(depth)
mm=2**depth-1
#print(mm)
for i in range(mm-n):
num.append(0)
#print(num)
for i in range(1,depth+1):
for j in range(2**(i-1),2**i):
sumh+=num[j-1]
if sumh>haha:
haha=sumh
result=i
sumh=0
print(result)
8. 外卖店优先级
(162条消息) 蓝桥杯——历届真题 外卖店优先级-python_Prescu的博客-CSDN博客
代码:(超时)
#N是N家外卖店 M条信息 求T时刻位于优先级的
N,M,T=map(int,input().split())
temp=[[] for i in range(T+1)]
for i in range(M):
a,b=map(int,input().split())
temp[a].append(b)
#grade记录每时每刻外面店i的优先级以及是否在优先缓存中(0\1),与是否进行了-1(进行了就是1 没进行就是0)
grade=[[]for i in range(N+1)]
for i in range(1,N+1):
grade[i].append(0)
grade[i].append(0)
grade[i].append(0)
for i in range(1,T+1):
for n in range(1,N+1):
grade[n][2] = 0
if grade[n][0]>0:
grade[n][0] -= 1
grade[n][2]=1
if grade[n][0]<=3 and grade[n][1]==1: #出优先缓存
grade[n][1]=0
lenth=len(temp[i])
for j in range(lenth):
x=temp[i][j]
if grade[x][2]==1:
grade[x][0]+=3
grade[x][2]=0
else:
grade[x][0]+=2
if grade[x][0]>5 and grade[x][1]==0:
grade[x][1]=1
result=0
for i in range(1,N+1):
if grade[i][1]==1:
result+=1
print(result)
9. 修改数组
自己写的代码时间会超限,在网上借鉴的别人的: