当前位置:   article > 正文

蓝桥杯-第十届蓝桥杯 C语言A组/B组/C组/研究生组-Python题解_python研究生组和a组题,有

python研究生组和a组题,有

  1. #判断数字中是否含有2,0,1,9
  2. def has2019(n):
  3. flag=False
  4. while n!=0:
  5. a=n%10
  6. if a==2 or a==0 or a==1 or a==9:
  7. flag=True
  8. return flag
  9. #注意python的除法机制
  10. n//=10
  11. return flag
  12. sum=0
  13. for i in range(1,2019+1):
  14. if has2019(i):
  15. sum+=i**2
  16. print(sum)

  1. #利用动态数组
  2. #不必申请过多空间
  3. item_list=[0 for i in range(4)]
  4. item_list[1]=1
  5. item_list[2]=1
  6. item_list[3]=1
  7. #计算每一项的值
  8. #因为每一项只和其前3项有关
  9. #计算之后需要更新列表元素值
  10. for i in range(4,20190324+1):
  11. temp=sum(item_list[1:4])
  12. #只需最后4位数
  13. temp%=10000
  14. #更新元素值
  15. item_list[1]=item_list[2]
  16. item_list[2]=item_list[3]
  17. item_list[3]=temp
  18. print(item_list[3])

 

 

  1. #读取迷宫地图
  2. file=open('E:\project_code\蓝桥杯\maze.txt','r')
  3. read_map=file.readlines()
  4. #迷宫中坐标和值的映射关系
  5. point_value_map={}
  6. #建立迷宫
  7. #先在迷宫外面建墙,方便搜索迷宫
  8. for i in range(0,32):
  9. point_value_map[(i,0)]='1'
  10. point_value_map[(i,51)]='1'
  11. for i in range(0,52):
  12. point_value_map[(0,i)]='1'
  13. point_value_map[(31,i)]='1'
  14. x=1
  15. for line in read_map:
  16. #读取到的迷宫每一行最后一个是\n换行符
  17. for i in range(len(line)-1):
  18. point_value_map[(x,i+1)]=line[i]
  19. x+=1
  20. #对迷宫按照题目中规定的字典序进行广度优先搜索
  21. from collections import deque
  22. bread_first_queue=deque()
  23. #当前节点是否已经遍历过
  24. has_checked=[]
  25. #遍历的起始点和终止点的坐标
  26. start_point=(1,1)
  27. end_point=(30,50)
  28. bread_first_queue.append(start_point)
  29. while bread_first_queue:
  30. now_point=bread_first_queue.popleft()
  31. #如果当前节点没有遍历
  32. if now_point not in has_checked:
  33. #如果当前节点是终点,则广度优先搜索结束
  34. if now_point==end_point:
  35. break
  36. else:
  37. #按照题目规定对四个方向进行搜索
  38. #D<L<R<U
  39. down_point=(now_point[0]+1,now_point[1])
  40. left_point=(now_point[0],now_point[1]-1)
  41. right_point=(now_point[0],now_point[1]+1)
  42. up_point=(now_point[0]-1,now_point[1])
  43. #标记当前节点已经被访问过
  44. has_checked.append(now_point)
  45. if point_value_map.get(down_point)=='0' and (down_point not in has_checked):
  46. bread_first_queue.append(down_point)
  47. if point_value_map.get(left_point)=='0' and (left_point not in has_checked):
  48. bread_first_queue.append(left_point)
  49. if point_value_map.get(right_point)=='0' and (right_point not in has_checked):
  50. bread_first_queue.append(right_point)
  51. if point_value_map.get(up_point)=='0' and (up_point not in has_checked):
  52. bread_first_queue.append(up_point)
  53. #从所有的可能路径中寻找字典序最小路径
  54. total_road=has_checked+[end_point]
  55. #最小路径坐标序列
  56. sequence_of_point=[]
  57. #最小路径的字母表示
  58. sequence_of_direction=[]
  59. #当前坐标点,从终点向起点回溯
  60. now_point=(end_point)
  61. while now_point != start_point:
  62. down_point = (now_point[0] + 1, now_point[1])
  63. left_point = (now_point[0], now_point[1] - 1)
  64. right_point = (now_point[0], now_point[1] + 1)
  65. up_point = (now_point[0] - 1, now_point[1])
  66. if point_value_map.get(up_point)=='0' and up_point in total_road:
  67. sequence_of_point.append(up_point)
  68. index=total_road.index(up_point)
  69. #删除掉其它路径
  70. total_road=total_road[:index]
  71. sequence_of_direction.append('D')
  72. now_point=up_point
  73. elif point_value_map.get(right_point)=='0' and right_point in total_road:
  74. sequence_of_point.append(right_point)
  75. index=total_road.index(right_point)
  76. #删除掉其它路径
  77. total_road=total_road[:index]
  78. sequence_of_direction.append('L')
  79. now_point=right_point
  80. elif point_value_map.get(left_point)=='0' and left_point in total_road:
  81. sequence_of_point.append(left_point)
  82. index=total_road.index(left_point)
  83. #删除掉其它路径
  84. total_road=total_road[:index]
  85. sequence_of_direction.append('R')
  86. now_point=left_point
  87. elif point_value_map.get(down_point)=='0' and down_point in total_road:
  88. sequence_of_point.append(down_point)
  89. index=total_road.index(down_point)
  90. #删除掉其它路径
  91. total_road=total_road[:index]
  92. sequence_of_direction.append('U')
  93. now_point=down_point
  94. #结果字符串
  95. result_string=''
  96. for i in sequence_of_direction:
  97. result_string+=i
  98. print(result_string[::-1])

  1. n=int(input())
  2. tree_list=list(map(int,input().split()))
  3. from math import log
  4. #求树深
  5. tree_depth=int(log(n,2))+1
  6. #最大节点权值和
  7. max_value=0
  8. #最大节点权值和所在的层次
  9. max_depth=0
  10. for i in range(tree_depth):
  11. temp=sum(tree_list[2**i-1:2**(i+1)-1])
  12. if temp>max_value:
  13. max_value=temp
  14. max_depth=i+1
  15. print(max_depth)

  1. #模拟题,按照题目中的规则进行模拟
  2. n,m,t=map(int,input().split())
  3. #商家列表
  4. shop_list=[0 for i in range(n+1)]
  5. #订单信息列表
  6. order_list=[]
  7. for i in range(m):
  8. order_time,order_id=map(int,input().split())
  9. order_list.append([order_time,order_id])
  10. #将订单按照时间顺序进行排序
  11. order_list.sort(key=lambda x:x[0])
  12. #优先缓存队列
  13. catch=[]
  14. #按照时间顺序进行商家优先级更新
  15. for time in range(1,t+1):
  16. #假设time时刻所有商家都没有订单
  17. flag=True
  18. #遍历订单列表,寻找当前时刻订单信息
  19. for order_item in order_list:
  20. if order_item[0]==time:
  21. #当前时刻存在订单
  22. flag=False
  23. #更新相应商家优先级
  24. shop_list[order_item[1]]+=2
  25. #更新其它商家优先级
  26. for i in range(1,n+1):
  27. if i==order_item[1]:
  28. continue
  29. else:
  30. if shop_list[i]==0:
  31. continue
  32. else:
  33. shop_list[i]-=1
  34. #当前时刻所有商家都没有订单
  35. if flag:
  36. for i in range(1,n+1):
  37. if shop_list[i]==0:
  38. continue
  39. else:
  40. shop_list[i]-=1
  41. #根据商家优先级更新缓存队列
  42. for i in range(1,n+1):
  43. if shop_list[i]>5 and (i not in catch):
  44. catch.append(i)
  45. if shop_list[i]<=3 and (i in catch):
  46. catch.remove(i)
  47. print(len(catch))

  1. n=int(input())
  2. number_list=list(map(int,input().split()))
  3. for i in range(len(number_list)):
  4. while number_list[i] in number_list[:i]:
  5. number_list[i]+=1
  6. print(number_list)

 

 

 

  1. # 深度优先搜索,寻找最优组合
  2. # 每名队员只能担任一个位置
  3. # 最大评分
  4. max_value = -1
  5. # 编号,评分表
  6. id_score_table = [[0] * 7 for i in range(21)]
  7. # 标记当前队员是否已经访问
  8. has_checked = []
  9. # 读取文件
  10. file = open('E:/project_code/蓝桥杯/team.txt', 'r')
  11. read_table = file.readlines()
  12. # 建立表格,从(1,1)开始
  13. x = 1
  14. for item in read_table:
  15. #读取到的内容是以字符串形式返回
  16. #需要处理一下
  17. #将最后一个\n符号去掉
  18. item=item[:-1]
  19. #从字符串分割出数字
  20. item=item.split()
  21. for i in range(len(item)):
  22. #这里字符串需要转换为数字
  23. id_score_table[x][i+1] = int(item[i])
  24. x+=1
  25. #深度优先搜索
  26. def dfs(temp_max,depth):
  27. global max_value
  28. #temp_max是当前组合最大值
  29. #depth是当前在第几列
  30. #已经遍历完所有的列
  31. if depth==7:
  32. max_value=max(temp_max,max_value)
  33. return
  34. #遍历每个队员的组合
  35. for i in range(1,21):
  36. #如果当前队员还没有被遍历
  37. if i not in has_checked:
  38. has_checked.append(i)
  39. #向下一列继续试探
  40. dfs(temp_max+id_score_table[i][depth],depth+1)
  41. #试探结束,回溯
  42. has_checked.remove(i)
  43. #寻找最大值
  44. for i in range(1,21):
  45. has_checked.append(i)
  46. dfs(id_score_table[i][2],3)
  47. has_checked.remove(i)
  48. print(max_value)

  1. x=2019
  2. ans=''
  3. while x!=0:
  4. #A的ASCII码为65
  5. #从64计算
  6. ans+=chr(x%26+64)
  7. x//=26
  8. print(ans[::-1])

  1. #判断数字中是否含有2,4
  2. def has24(n):
  3. #假设不含有
  4. flag=False
  5. while n!=0:
  6. a=n%10
  7. if a==2 or a==4:
  8. flag=True
  9. return flag
  10. n//=10
  11. return flag
  12. count=0
  13. #按照i<j<k进行试探组合
  14. for i in range(1,2019+1):
  15. if has24(i):
  16. continue
  17. for j in range(i+1,2019+1):
  18. if has24(j):
  19. continue
  20. k=2019-i-j
  21. #按照i<j<k顺序进行试探
  22. if k<=i or k<=j or has24(k):
  23. continue
  24. else:
  25. count+=1
  26. print(count)

 

  1. n=int(input())
  2. number_list=list(map(int,input().split()))
  3. #将数列排序,求出等差数列的公差
  4. number_list.sort()
  5. #公差就是相邻元素的最小差值
  6. min_value=10**10
  7. for i in range(len(number_list)-1):
  8. temp=number_list[i+1]-number_list[i]
  9. if temp<min_value:
  10. min_value=temp
  11. #计算等差数列的项数
  12. ans=0
  13. for i in range(number_list[0],number_list[len(number_list)-1]+1,min_value):
  14. ans+=1
  15. print(ans)

  1. #按照题目要求进行模拟
  2. a=2019
  3. b=324
  4. ans=0
  5. #切割最后可能有两种情况
  6. #1.有一个边长为0,完全切割,直接退出即可
  7. #2.有一个边长为1,切割数加上最后的最大边长即可
  8. #标记边长是否为1
  9. flag=False
  10. while True:
  11. temp=a
  12. #进行一次切割
  13. #从大的边长中减去小的边长
  14. a=max(temp-b,b)
  15. b=min(temp-b,b)
  16. ans+=1
  17. if a==1 or b==1:
  18. flag=True
  19. break
  20. if a==0 or b==0:
  21. break
  22. if flag:
  23. ans+=max(a,b)
  24. print(ans)

  1. #质数列表
  2. prime_number_list=[]
  3. #素数筛法数表
  4. number_list=[i for i in range(2,100001)]
  5. #素数筛法
  6. for i in range(len(number_list)):
  7. if number_list[i]!=0 and number_list[i] not in prime_number_list:
  8. #添加当前素数
  9. prime_number_list.append(number_list[i])
  10. if len(prime_number_list)>=2019:
  11. break
  12. for j in range(i+1,len(number_list)):
  13. if number_list[j]%number_list[i]==0:
  14. number_list[j]=0
  15. print(prime_number_list.pop(2018))

 

 

  1. #顺时针旋转90
  2. n,m=map(int,input().split())
  3. matrix=[[0]*m for i in range(n)]
  4. for i in range(n):
  5. matrix[i]=list(map(int,input().split()))
  6. #先将矩阵倒序,然后行列互换
  7. matrix[::] = [[row[i] for row in matrix[::-1]] for i in range(len(matrix[0]))]
  8. print(matrix)

 

 

 

 

  1. #字符串处理问题
  2. k=int(input())
  3. string=input()
  4. #正则匹配模块
  5. import re
  6. #将字符串按照 '.' 和空格进分割
  7. #'.+空格'将被分解成一个空字符
  8. string_list=re.split('\s+|\.',string)
  9. #总的出现次数为:
  10. #alice->bob的距离+bob->alice的距离
  11. ans=0
  12. for i in range(len(string_list)):
  13. if string_list[i]=='Alice':
  14. for j in range(i+1,len(string_list)):
  15. #当前字符串后面有一个空格
  16. #分割的时候被删掉了
  17. #所以sum应该从1开始计数
  18. sum=1
  19. if string_list[j]=='Bob':
  20. #计算中间出现的字符数
  21. for k in range(i+1,j):
  22. #同样因为空格要+1
  23. sum+=(len(string_list[k])+1)
  24. if sum<=k:
  25. ans+=1
  26. #只计算一次最短距离
  27. break
  28. #bob->alice的距离
  29. for i in range(len(string_list)):
  30. if string_list[i]=='Bob':
  31. for j in range(i+1,len(string_list)):
  32. #当前字符串后面有一个空格
  33. #分割的时候被删掉了
  34. #所以sum应该从1开始计数
  35. sum=1
  36. if string_list[j]=='Alice':
  37. #计算中间出现的字符数
  38. for k in range(i+1,j):
  39. #同样因为空格要+1
  40. sum+=(len(string_list[k])+1)
  41. if sum<=k:
  42. ans+=1
  43. #只计算一次最短距离
  44. break
  45. print(ans)

  1. string=input()
  2. ans=0
  3. #26进制转为10进制
  4. for i in range(len(string)):
  5. #字符i的ascii码
  6. number=ord(string[i])
  7. ans+=(number-64)*(26**(len(string)-(i+1)))
  8. 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

  1. #利用素数筛法找出p,q
  2. p=891234941
  3. q=1123984201
  4. n=1001733993063167141
  5. c=20190324
  6. d=212353
  7. for i in range(1,500000):
  8. if(((p-1)*(q-1)*i+1)%d==0):
  9. e=((p-1)*(q-1)*i+1)//212353
  10. print(((p-1)*(q-1)*i+1)//d)
  11. break
  12. def quick_mod(a,b,c):
  13. a=a%c
  14. ans=1
  15. while b!=0:
  16. if b&1:
  17. ans=(ans*a)%c
  18. b>>=1
  19. a=(a*a)%c
  20. return ans
  21. x=quick_mod(c,e,n)
  22. print(x)
  23. print(quick_mod(x,d,n))

计算斐波那契数列的第N项/第N+1项的值

  1. number_list=[0 for i in range(3)]
  2. number_list[1]=1
  3. number_list[2]=1
  4. n=int(input())
  5. for i in range(3,n+1+1):
  6. temp=number_list[1]+number_list[2]
  7. number_list[1]=number_list[2]
  8. number_list[2]=temp
  9. print('%.8f'%(number_list[1]/number_list[2]))

 

 

  1. #迪杰斯特拉求最短路径
  2. def shortPath(start_point,graph):
  3. #start_point是求最短路径的起点
  4. #graph是领接矩阵
  5. #已经求出最短路径的顶点
  6. has_past=[]
  7. #还没有求出最短路径的顶点
  8. no_past=[]
  9. #从start_point到其它顶点的最短距离
  10. dis=[]
  11. #初始化
  12. #从起点开始算到其它顶点的最短路径
  13. has_past.append(start_point)
  14. #除了起点其它没有求出最短路径的顶点
  15. no_past=[x for x in range(len(graph)) if x != start_point]
  16. #最初的从起点到其它顶点的最短距离默认为领接矩阵顶点所在的行
  17. dis=graph[start_point]
  18. #当还有没计算出最短距离的顶点时
  19. while len(no_past):
  20. id=no_past[0]
  21. #寻找从起点到其它顶点的最短距离
  22. for i in no_past:
  23. if dis[i]<dis[id]:
  24. id=i
  25. #借助第id个顶点松弛起点到其它顶点的最短距离
  26. for i in no_past:
  27. if dis[id]+graph[id][i]<dis[i]:
  28. dis[i]=dis[id]+graph[id][i]
  29. return dis

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/592694
推荐阅读
相关标签
  

闽ICP备14008679号