赞
踩
- #判断数字中是否含有2,0,1,9
- def has2019(n):
- flag=False
- while n!=0:
- a=n%10
- if a==2 or a==0 or a==1 or a==9:
- flag=True
- return flag
- #注意python的除法机制
- n//=10
- return flag
-
- sum=0
- for i in range(1,2019+1):
- if has2019(i):
- sum+=i**2
-
- print(sum)
- #利用动态数组
- #不必申请过多空间
- item_list=[0 for i in range(4)]
- item_list[1]=1
- item_list[2]=1
- item_list[3]=1
- #计算每一项的值
- #因为每一项只和其前3项有关
- #计算之后需要更新列表元素值
- for i in range(4,20190324+1):
- temp=sum(item_list[1:4])
- #只需最后4位数
- temp%=10000
- #更新元素值
- item_list[1]=item_list[2]
- item_list[2]=item_list[3]
- item_list[3]=temp
-
- print(item_list[3])
- #读取迷宫地图
- file=open('E:\project_code\蓝桥杯\maze.txt','r')
- read_map=file.readlines()
- #迷宫中坐标和值的映射关系
- point_value_map={}
-
- #建立迷宫
- #先在迷宫外面建墙,方便搜索迷宫
- for i in range(0,32):
- point_value_map[(i,0)]='1'
- point_value_map[(i,51)]='1'
- for i in range(0,52):
- point_value_map[(0,i)]='1'
- point_value_map[(31,i)]='1'
- x=1
- for line in read_map:
- #读取到的迷宫每一行最后一个是\n换行符
- for i in range(len(line)-1):
- point_value_map[(x,i+1)]=line[i]
- x+=1
-
- #对迷宫按照题目中规定的字典序进行广度优先搜索
- from collections import deque
- bread_first_queue=deque()
- #当前节点是否已经遍历过
- has_checked=[]
- #遍历的起始点和终止点的坐标
- start_point=(1,1)
- end_point=(30,50)
- bread_first_queue.append(start_point)
- while bread_first_queue:
- now_point=bread_first_queue.popleft()
- #如果当前节点没有遍历
- if now_point not in has_checked:
- #如果当前节点是终点,则广度优先搜索结束
- if now_point==end_point:
- break
- else:
- #按照题目规定对四个方向进行搜索
- #D<L<R<U
- down_point=(now_point[0]+1,now_point[1])
- left_point=(now_point[0],now_point[1]-1)
- right_point=(now_point[0],now_point[1]+1)
- up_point=(now_point[0]-1,now_point[1])
- #标记当前节点已经被访问过
- has_checked.append(now_point)
-
- if point_value_map.get(down_point)=='0' and (down_point not in has_checked):
- bread_first_queue.append(down_point)
- if point_value_map.get(left_point)=='0' and (left_point not in has_checked):
- bread_first_queue.append(left_point)
- if point_value_map.get(right_point)=='0' and (right_point not in has_checked):
- bread_first_queue.append(right_point)
- if point_value_map.get(up_point)=='0' and (up_point not in has_checked):
- bread_first_queue.append(up_point)
- #从所有的可能路径中寻找字典序最小路径
- total_road=has_checked+[end_point]
- #最小路径坐标序列
- sequence_of_point=[]
- #最小路径的字母表示
- sequence_of_direction=[]
- #当前坐标点,从终点向起点回溯
- now_point=(end_point)
- while now_point != start_point:
- down_point = (now_point[0] + 1, now_point[1])
- left_point = (now_point[0], now_point[1] - 1)
- right_point = (now_point[0], now_point[1] + 1)
- up_point = (now_point[0] - 1, now_point[1])
- if point_value_map.get(up_point)=='0' and up_point in total_road:
- sequence_of_point.append(up_point)
- index=total_road.index(up_point)
- #删除掉其它路径
- total_road=total_road[:index]
- sequence_of_direction.append('D')
- now_point=up_point
- elif point_value_map.get(right_point)=='0' and right_point in total_road:
- sequence_of_point.append(right_point)
- index=total_road.index(right_point)
- #删除掉其它路径
- total_road=total_road[:index]
- sequence_of_direction.append('L')
- now_point=right_point
- elif point_value_map.get(left_point)=='0' and left_point in total_road:
- sequence_of_point.append(left_point)
- index=total_road.index(left_point)
- #删除掉其它路径
- total_road=total_road[:index]
- sequence_of_direction.append('R')
- now_point=left_point
- elif point_value_map.get(down_point)=='0' and down_point in total_road:
- sequence_of_point.append(down_point)
- index=total_road.index(down_point)
- #删除掉其它路径
- total_road=total_road[:index]
- sequence_of_direction.append('U')
- now_point=down_point
-
- #结果字符串
- result_string=''
- for i in sequence_of_direction:
- result_string+=i
- print(result_string[::-1])
- n=int(input())
- tree_list=list(map(int,input().split()))
- from math import log
- #求树深
- tree_depth=int(log(n,2))+1
- #最大节点权值和
- max_value=0
- #最大节点权值和所在的层次
- max_depth=0
- for i in range(tree_depth):
- temp=sum(tree_list[2**i-1:2**(i+1)-1])
- if temp>max_value:
- max_value=temp
- max_depth=i+1
-
- print(max_depth)
- #模拟题,按照题目中的规则进行模拟
- n,m,t=map(int,input().split())
- #商家列表
- shop_list=[0 for i in range(n+1)]
- #订单信息列表
- order_list=[]
- for i in range(m):
- order_time,order_id=map(int,input().split())
- order_list.append([order_time,order_id])
- #将订单按照时间顺序进行排序
- order_list.sort(key=lambda x:x[0])
- #优先缓存队列
- catch=[]
-
- #按照时间顺序进行商家优先级更新
- for time in range(1,t+1):
- #假设time时刻所有商家都没有订单
- flag=True
- #遍历订单列表,寻找当前时刻订单信息
- for order_item in order_list:
- if order_item[0]==time:
- #当前时刻存在订单
- flag=False
- #更新相应商家优先级
- shop_list[order_item[1]]+=2
- #更新其它商家优先级
- for i in range(1,n+1):
- if i==order_item[1]:
- continue
- else:
- if shop_list[i]==0:
- continue
- else:
- shop_list[i]-=1
- #当前时刻所有商家都没有订单
- if flag:
- for i in range(1,n+1):
- if shop_list[i]==0:
- continue
- else:
- shop_list[i]-=1
- #根据商家优先级更新缓存队列
- for i in range(1,n+1):
- if shop_list[i]>5 and (i not in catch):
- catch.append(i)
- if shop_list[i]<=3 and (i in catch):
- catch.remove(i)
-
- print(len(catch))
- n=int(input())
- number_list=list(map(int,input().split()))
- for i in range(len(number_list)):
- while number_list[i] in number_list[:i]:
- number_list[i]+=1
-
- print(number_list)
- # 深度优先搜索,寻找最优组合
- # 每名队员只能担任一个位置
-
- # 最大评分
- max_value = -1
- # 编号,评分表
- id_score_table = [[0] * 7 for i in range(21)]
-
- # 标记当前队员是否已经访问
- has_checked = []
-
- # 读取文件
- file = open('E:/project_code/蓝桥杯/team.txt', 'r')
- read_table = file.readlines()
- # 建立表格,从(1,1)开始
- x = 1
- for item in read_table:
- #读取到的内容是以字符串形式返回
- #需要处理一下
-
- #将最后一个\n符号去掉
- item=item[:-1]
- #从字符串分割出数字
- item=item.split()
- for i in range(len(item)):
- #这里字符串需要转换为数字
- id_score_table[x][i+1] = int(item[i])
- x+=1
-
- #深度优先搜索
- def dfs(temp_max,depth):
- global max_value
- #temp_max是当前组合最大值
- #depth是当前在第几列
-
- #已经遍历完所有的列
- if depth==7:
- max_value=max(temp_max,max_value)
- return
-
- #遍历每个队员的组合
- for i in range(1,21):
- #如果当前队员还没有被遍历
- if i not in has_checked:
- has_checked.append(i)
- #向下一列继续试探
- dfs(temp_max+id_score_table[i][depth],depth+1)
- #试探结束,回溯
- has_checked.remove(i)
-
- #寻找最大值
- for i in range(1,21):
- has_checked.append(i)
- dfs(id_score_table[i][2],3)
- has_checked.remove(i)
-
- print(max_value)
- x=2019
- ans=''
- while x!=0:
- #A的ASCII码为65
- #从64计算
- ans+=chr(x%26+64)
- x//=26
-
- print(ans[::-1])
- #判断数字中是否含有2,4
- def has24(n):
- #假设不含有
- flag=False
- while n!=0:
- a=n%10
- if a==2 or a==4:
- flag=True
- return flag
- n//=10
- return flag
- count=0
-
- #按照i<j<k进行试探组合
- for i in range(1,2019+1):
- if has24(i):
- continue
- for j in range(i+1,2019+1):
- if has24(j):
- continue
- k=2019-i-j
- #按照i<j<k顺序进行试探
- if k<=i or k<=j or has24(k):
- continue
- else:
- count+=1
-
- print(count)
- n=int(input())
- number_list=list(map(int,input().split()))
- #将数列排序,求出等差数列的公差
- number_list.sort()
- #公差就是相邻元素的最小差值
- min_value=10**10
- for i in range(len(number_list)-1):
- temp=number_list[i+1]-number_list[i]
- if temp<min_value:
- min_value=temp
- #计算等差数列的项数
- ans=0
- for i in range(number_list[0],number_list[len(number_list)-1]+1,min_value):
- ans+=1
-
- print(ans)
- #按照题目要求进行模拟
- a=2019
- b=324
- ans=0
- #切割最后可能有两种情况
- #1.有一个边长为0,完全切割,直接退出即可
- #2.有一个边长为1,切割数加上最后的最大边长即可
-
- #标记边长是否为1
- flag=False
- while True:
- temp=a
- #进行一次切割
- #从大的边长中减去小的边长
- a=max(temp-b,b)
- b=min(temp-b,b)
- ans+=1
- if a==1 or b==1:
- flag=True
- break
- if a==0 or b==0:
- break
- if flag:
- ans+=max(a,b)
-
- print(ans)
- #质数列表
- prime_number_list=[]
- #素数筛法数表
- number_list=[i for i in range(2,100001)]
- #素数筛法
- for i in range(len(number_list)):
- if number_list[i]!=0 and number_list[i] not in prime_number_list:
- #添加当前素数
- prime_number_list.append(number_list[i])
- if len(prime_number_list)>=2019:
- break
- for j in range(i+1,len(number_list)):
- if number_list[j]%number_list[i]==0:
- number_list[j]=0
-
- print(prime_number_list.pop(2018))
- #顺时针旋转90
- n,m=map(int,input().split())
- matrix=[[0]*m for i in range(n)]
- for i in range(n):
- matrix[i]=list(map(int,input().split()))
- #先将矩阵倒序,然后行列互换
- matrix[::] = [[row[i] for row in matrix[::-1]] for i in range(len(matrix[0]))]
-
- print(matrix)
- #字符串处理问题
- k=int(input())
- string=input()
- #正则匹配模块
- import re
- #将字符串按照 '.' 和空格进分割
- #'.+空格'将被分解成一个空字符
- string_list=re.split('\s+|\.',string)
- #总的出现次数为:
- #alice->bob的距离+bob->alice的距离
- ans=0
- for i in range(len(string_list)):
- if string_list[i]=='Alice':
- for j in range(i+1,len(string_list)):
- #当前字符串后面有一个空格
- #分割的时候被删掉了
- #所以sum应该从1开始计数
- sum=1
- if string_list[j]=='Bob':
- #计算中间出现的字符数
- for k in range(i+1,j):
- #同样因为空格要+1
- sum+=(len(string_list[k])+1)
- if sum<=k:
- ans+=1
- #只计算一次最短距离
- break
- #bob->alice的距离
- for i in range(len(string_list)):
- if string_list[i]=='Bob':
- for j in range(i+1,len(string_list)):
- #当前字符串后面有一个空格
- #分割的时候被删掉了
- #所以sum应该从1开始计数
- sum=1
- if string_list[j]=='Alice':
- #计算中间出现的字符数
- for k in range(i+1,j):
- #同样因为空格要+1
- sum+=(len(string_list[k])+1)
- if sum<=k:
- ans+=1
- #只计算一次最短距离
- break
-
- print(ans)
- string=input()
- ans=0
- #26进制转为10进制
- for i in range(len(string)):
- #字符i的ascii码
- number=ord(string[i])
- ans+=(number-64)*(26**(len(string)-(i+1)))
-
- print(ans)
按照以下过程进行计算:
n=p*q
p,q为素数
d与(p-1)*(q-1)互素
(d*e)%((p-1)*(q-1))=1
c=x^d%n
x=c^e%n
给定d,c,n
求x
- #利用素数筛法找出p,q
- p=891234941
- q=1123984201
- n=1001733993063167141
- c=20190324
- d=212353
- for i in range(1,500000):
- if(((p-1)*(q-1)*i+1)%d==0):
- e=((p-1)*(q-1)*i+1)//212353
- print(((p-1)*(q-1)*i+1)//d)
- break
- def quick_mod(a,b,c):
- a=a%c
- ans=1
- while b!=0:
- if b&1:
- ans=(ans*a)%c
- b>>=1
- a=(a*a)%c
- return ans
- x=quick_mod(c,e,n)
- print(x)
- print(quick_mod(x,d,n))
计算斐波那契数列的第N项/第N+1项的值
- number_list=[0 for i in range(3)]
- number_list[1]=1
- number_list[2]=1
- n=int(input())
- for i in range(3,n+1+1):
- temp=number_list[1]+number_list[2]
- number_list[1]=number_list[2]
- number_list[2]=temp
-
- print('%.8f'%(number_list[1]/number_list[2]))
- #迪杰斯特拉求最短路径
- def shortPath(start_point,graph):
- #start_point是求最短路径的起点
- #graph是领接矩阵
- #已经求出最短路径的顶点
- has_past=[]
- #还没有求出最短路径的顶点
- no_past=[]
- #从start_point到其它顶点的最短距离
- dis=[]
- #初始化
- #从起点开始算到其它顶点的最短路径
- has_past.append(start_point)
- #除了起点其它没有求出最短路径的顶点
- no_past=[x for x in range(len(graph)) if x != start_point]
- #最初的从起点到其它顶点的最短距离默认为领接矩阵顶点所在的行
- dis=graph[start_point]
-
- #当还有没计算出最短距离的顶点时
- while len(no_past):
- id=no_past[0]
- #寻找从起点到其它顶点的最短距离
- for i in no_past:
- if dis[i]<dis[id]:
- id=i
- #借助第id个顶点松弛起点到其它顶点的最短距离
- for i in no_past:
- if dis[id]+graph[id][i]<dis[i]:
- dis[i]=dis[id]+graph[id][i]
- return dis
-
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。