当前位置:   article > 正文

蓝桥杯 第十二届 Python组真题_十二届蓝桥杯python1月中高级

十二届蓝桥杯python1月中高级

目录

1.卡片

2.40257

3.

4.10266837

5.

6.时间显示

7.杨辉三角 

8. 

9.

10.


做了三个小时,和去年相比,也就能多做一个dijkstra

其他的地方看着根本没思路,看了看答案也都是动归,dfs,bfs,但是以我目前的理解,好像用不到这上面

这次就当体验一下题目了,接下来的两个月重点抓动归和搜索

1.卡片

答案为3181

  1. hash=[0 for i in range(10)]
  2. i=1
  3. while(i):
  4. string=str(i)
  5. for j in string:
  6. hash[int(j)]+=1
  7. if hash[int(j)]==2021:
  8. print(i)
  9. i=0
  10. break
  11. if i==0:
  12. break
  13. else:i+=1

2.40257

python小数运算会搞怪 

  1. def getline(a,b):
  2. if b[0]-a[0]==0:
  3. k=-1<<31
  4. b=b[0]
  5. else:
  6. k=(b[1]-a[1])/(b[0]-a[0])
  7. b=b[1]-k*b[0]
  8. return (k,b)
  9. point=[]
  10. for i in range(20):
  11. for j in range(21):
  12. point.append((i,j))
  13. ans=[]
  14. for i in range(len(point)):
  15. for j in range(i+1,len(point)):
  16. line=getline(point[i],point[j])
  17. if line not in ans:
  18. ans.append(line)
  19. print(len(ans))

3.

4.10266837

  1. def gcd(a,b):
  2. if b==0:
  3. return a
  4. return gcd(b,a%b)
  5. def getmin(a,b):
  6. return a*b//gcd(a,b)
  7. adj=[[]for i in range(2022)]
  8. for i in range(1,2022):
  9. left,right=-1,-1
  10. if i<21:
  11. left=1
  12. right=i+21
  13. elif i>2000:
  14. left=i-21
  15. right=2021
  16. else:
  17. left=i-21
  18. right=i+21
  19. for j in range(left,right+1):
  20. length=getmin(i,j)
  21. adj[i].append((j,length))
  22. d=[1<<31 for i in range(2022)]
  23. vis=[False for i in range(2022)]
  24. def dijkstra():
  25. d[1]=0
  26. for i in range(2021):
  27. minlength=1<<31
  28. minindex=-1
  29. for j in range(1,2022):
  30. if not vis[j] and d[j]<minlength:
  31. minlength=d[j]
  32. minindex=j
  33. if minindex==-1:
  34. return
  35. vis[minindex]=True
  36. for point in adj[minindex]:
  37. index=point[0]
  38. length=point[1]
  39. if not vis[index] and d[index]>d[minindex]+length:
  40. d[index]=d[minindex]+length
  41. dijkstra()
  42. print(d[2021])

5.

  1. def gcd(a,b):
  2. if b==0:
  3. return a
  4. return gcd(b,a%b)
  5. adj=[[]for i in range(22)]
  6. for i in range(1,22):
  7. for j in range(i+1,22):
  8. if gcd(i,j)==1:
  9. adj[i].append(j)
  10. adj[j].append(i)
  11. vis=[False for i in range(22)]
  12. ans=0
  13. length=0
  14. def dfs(cur):
  15. global vis
  16. global ans
  17. global length
  18. if 1 in adj[cur] and False not in vis:
  19. ans+=1
  20. return
  21. if False not in vis:
  22. return
  23. for i in adj[cur]:
  24. if not vis[i]:
  25. vis[i]=True
  26. dfs(i)
  27. vis[i]=False
  28. return
  29. # for i in adj:
  30. # print(i)
  31. vis[0]=True
  32. vis[1]=True
  33. dfs(1)
  34. print(ans)

6.时间显示

  1. a=int(input())
  2. day=24*60*60
  3. s=a//1000
  4. s=s%day
  5. h=s//3600
  6. lst=s%3600
  7. m=lst//60
  8. s=lst%60
  9. print("{:02d}:{:02d}:{:02d}".format(h,m,s))

7.杨辉三角 

  1. a=int(input())
  2. dp=[[0 for i in range(a)]for i in range(a)]
  3. dp[0][0]=1
  4. cur=1
  5. def finds():
  6. for i in range(1,a):
  7. dp[i][0]=1
  8. dp[i][i]=1
  9. for j in range(1,i):
  10. dp[i][j]=dp[i-1][j-1]+dp[i-1][j]
  11. if dp[i][j]==a:
  12. cur=(i*(i+1))//2+1+j
  13. return cur
  14. print(finds())

8. 

9.

10.

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

闽ICP备14008679号