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)