蓝桥杯 第十二届 Python组真题

目录

1.卡片

2.40257

3.

4.10266837

5.

6.时间显示

7.杨辉三角 

8. 

9.

10.


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

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

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

1.卡片

答案为3181

蓝桥杯 第十二届 Python组真题_第1张图片

hash=[0 for i in range(10)]
i=1
while(i):
    string=str(i)
    for j in string:
        hash[int(j)]+=1
        if hash[int(j)]==2021:
            print(i)
            i=0
            break
    if i==0:
        break
    else:i+=1

2.40257

python小数运算会搞怪 

蓝桥杯 第十二届 Python组真题_第2张图片

蓝桥杯 第十二届 Python组真题_第3张图片

def getline(a,b):
    if b[0]-a[0]==0:
        k=-1<<31
        b=b[0]
    else:
        k=(b[1]-a[1])/(b[0]-a[0])
        b=b[1]-k*b[0]
    return (k,b)
point=[]
for i in range(20):
    for j in range(21):
        point.append((i,j))
ans=[]
for i in range(len(point)):
    for j in range(i+1,len(point)):
        line=getline(point[i],point[j])
        if line not in ans:
            ans.append(line)
print(len(ans))

3.

蓝桥杯 第十二届 Python组真题_第4张图片

4.10266837

蓝桥杯 第十二届 Python组真题_第5张图片

def gcd(a,b):
    if b==0:
        return a
    return gcd(b,a%b)
def getmin(a,b):
    return a*b//gcd(a,b)
adj=[[]for i in range(2022)]
for i in range(1,2022):
    left,right=-1,-1
    if i<21:
        left=1
        right=i+21
    elif i>2000:
        left=i-21
        right=2021
    else:
        left=i-21
        right=i+21
    for j in range(left,right+1):
        length=getmin(i,j)
        adj[i].append((j,length))
d=[1<<31 for i in range(2022)]
vis=[False for i in range(2022)]
def dijkstra():
    d[1]=0
    for i in range(2021):
        minlength=1<<31
        minindex=-1
        for j in range(1,2022):
            if not vis[j] and d[j]d[minindex]+length:
                d[index]=d[minindex]+length
dijkstra()
print(d[2021])

5.

蓝桥杯 第十二届 Python组真题_第6张图片

def gcd(a,b):
    if b==0:
        return a
    return gcd(b,a%b)
adj=[[]for i in range(22)]
for i in range(1,22):
    for j in range(i+1,22):
        if gcd(i,j)==1:
            adj[i].append(j)
            adj[j].append(i)

vis=[False for i in range(22)]
ans=0
length=0
def dfs(cur):
    global vis
    global ans
    global length
    if 1 in adj[cur] and False not in vis:
        ans+=1
        return
    if False not in vis:
        return
    for i in adj[cur]:
        if not vis[i]:
            vis[i]=True
            dfs(i)
            vis[i]=False
    return
# for i in adj:
#     print(i)
vis[0]=True
vis[1]=True
dfs(1)
print(ans)

6.时间显示

蓝桥杯 第十二届 Python组真题_第7张图片

a=int(input())
day=24*60*60
s=a//1000
s=s%day
h=s//3600
lst=s%3600
m=lst//60
s=lst%60
print("{:02d}:{:02d}:{:02d}".format(h,m,s))

7.杨辉三角 

蓝桥杯 第十二届 Python组真题_第8张图片

a=int(input())
dp=[[0 for i in range(a)]for i in range(a)]
dp[0][0]=1
cur=1
def finds():
    for i in range(1,a):
        dp[i][0]=1
        dp[i][i]=1
        for j in range(1,i):
            dp[i][j]=dp[i-1][j-1]+dp[i-1][j]
            if dp[i][j]==a:
                cur=(i*(i+1))//2+1+j
                return cur
print(finds())

8. 

9.

10.

你可能感兴趣的:(蓝桥杯,蓝桥杯,python,哈希算法)