蓝桥杯板子 python

N个数的最大公约数:

def gcd(a,b):
    if b==0:
        return a
    return gcd(b,a%b)

def super_gcd(num):#处理的N个数放Num里
    l=len(num)
    if l==1:
        return num[0]
    elif l==2:
        return gcd(num[0],num[1])
    else:
        return gcd(super_gcd(num[:l//2]),super_gcd(num[l//2:]))

num=[2,4,3,8]
print(super_gcd(num))
    

[蓝桥杯2018初赛]分数

def gcd(a,b):
    if b==0:
        return a
    return gcd(b,a%b)

mu=2**19
zi=0
for i in range(20):
    zi+=2**i
p=gcd(mu,zi)
print("%d/%d"%(zi/p,mu/p))

[蓝桥杯2018初赛]星期一

from datetime import *
dt1=datetime(1901,1,1)
dt2=datetime(2000,12,31)
dt=dt2-dt1
print(dt.days//7)

[蓝桥杯2018初赛]第几个幸运数

n=59084709587505
res=0
i=0
while 7**i<n:
    j=0
    while 5**j<n:
        k=0
        while 3**k<n:
            if (3**k)*(5**j)*(7**i)<n:
                res+=1
            k+=1
        j+=1
    i+=1
print(res)

[蓝桥杯2018初赛]乘积尾零

思路:如果要算一个数有多少个0的话,我们只要统计一个数的因子中有多少个5和多少个2,并取两者的最小值,比如100=5*5*2*2,10=2*5,1000=5*5*5*2*2*2·····,补充一点,如果要统计一个数中有多少个数能被a整除,直接用这个数来除以a就行。

num=[]
with open('maze.txt') as f:
    for line in f.readlines():
        num.append(list(map(int,line.split())))
wu=0
er=0
#10=5*2 0的产生为5和2
for i in range(len(num)):
    for j in range(10):
        while num[i][j]%2==0:
            er+=1
            num[i][j]//=2
        while num[i][j]%5==0:
            wu+=1
            num[i][j]//=5
        
print(min(wu,er))
            

蓝桥杯2013年第四届真题-幸运数

m,n=map(int,input().split())
b=[i for i in range(n)]
a=[i for i in range(m+1,n)]
del b[2::2] #删除2及小表2
print(b)
now=2
while b[now]<len(b):
   del b[b[now]::b[now]]##删除小标为B[now]的
   now+=1
print(b)
count=0
for i in a:#检查A中的序列号有几个在B中
    if i in b:
        count+=1
print(count)

全球变暖

bfs

from collections import deque
nn=1005
g=[]
st=[[0 for i in range(nn)]for i in range(nn)]
dx=[-1,1,0,0]
dy=[0,0,-1,1]
cnt=0

def bfs(a,b):
    global count,temp
    q=deque()
    st[a][b]=1
    count+=1
    q.append([a,b])
    while len(q):
        t=q.popleft()
        flag=1
        for i in range(4):
            x=t[0]+dx[i]
            y=t[1]+dy[i]
            if x<0 or x>=n or y<0 or y>=n:
                continue
            if g[x][y]=='.':
                flag=0
            if g[x][y]=='#' and st[x][y]==0:
                st[x][y]=1
                q.append([x,y])
                count+=1
        if not flag:
            temp+=1
            

n=int(input())
for i in range(n):
    g.append(list(input()))

for i in range(n):
    for j in range(n):
        temp=0
        count=0
        if g[i][j]=='#' and st[i][j]==0:
            bfs(i,j)
            if count==temp:
                cnt+=1
print(cnt)

dfs:

n=int(input())
st1=[[0 for i in range(n+5)]for i in range(n+5)]
g=[]
cnt=0
flag=0
dx=[-1,1,0,0]
dy=[0,0,-1,1]

def dfs(a,b):
    global flag
    st1[a][b]=1
    if g[a+1][b]=='#' and g[a-1][b]=='#' and g[a][b-1]=='#' and g[a][b+1]=='#':
        flag=1
    for i in range(4):
        x=a+dx[i]
        y=b+dy[i]
        if g[x][y]=='#' and st1[x][y]==0:
            dfs(x,y)
    
    

for i in range(n):
    g.append(list(map(str,input().strip())))


for i in range(n):
    for j in range(n):
        if g[i][j]=='#' and st1[i][j]==0:
            flag=0
            dfs(i,j)
            if flag==0:
                cnt+=1
print(cnt)

[蓝桥杯2019初赛]等差数列

 

def gcd(a,b):
    if b==0:
        return a
    return gcd(b,a%b)

n=int(input())
a=list(map(int,input().split()))
a.sort()
for i in range(1,n): #a[n]=a[n]-a[0]
    a[i]-=a[0]
d=a[1]
for i in range(2,n):
    d=gcd(d,a[i])
#an=a1+(n-1)*d  an-a1=(n-1)*d  n=(an-a1)//d+1
if d: #0的特判
    print(a[n-1]//d+1)
else:
    print(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值