0
点赞
收藏
分享

微信扫一扫

蓝桥杯Python真题二

【问题描述】

小蓝要为一条街的住户制作门牌号。 这条街一共有2020位住户,门牌号从1到2020编号。 小蓝制作门牌的方法是先制作0到9这几个数字字符,最后根据需要将字符粘贴到门牌上, 例如门牌1017需要依次粘贴字符1、0、1、7,即需要1个字符0, 2个字符1, 1个字符7。 请问要制作所有的1到2020号门牌,总共需要多少个字符2?

num = 0
for i in range(1,2021):
    num += str(i).count("2")
print(num)

【问题描述】
小蓝每天都锻炼身体。 正常情况下,小蓝每天跑1千米。如果某天是周一或者月初(1日),为了激励自己,小蓝要跑2千米。如果同时是周一或月初,小蓝也是跑2千米。 小蓝跑步已经坚持了很长时间,从2000年1月1日周六(含)到 2020年 10月 1日周四(含)。 请问这段时间小蓝总共跑步多少千米?

from datetime import *
now = datetime(2000,1,1)#初始化日期
endl = datetime(2020,10,1)#结束日期
count = 0
datetime = timedelta(1)
while now <= endl:
    if now.day == 1 or now.isoweekday() == 1:
        count += 1
    count += 1
    now += datetime
print(count)


"""
datetime.datetime.now()    表示当前时间
datetime.datetime.now().isoweekday()   返回1-7,代表周一到周日,当前时间所在本周第几天;
datetime.datetime.now().weekday()      返回的0-6,代表周一到周日
"""

【问题描述】

在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上,那么这些点中任意两点确定的直线是同一条。 给定平面上2×3个整点{(x, y)[0 ≤x <2,0≤y <3,x ∈ Z,y ∈Z},即横坐标是0到1(包含0和 1)之间的整数、纵坐标是О到2(包含0和2)之间的整数的点。这些点一共确定了11条不同的直线。 给定平面上20×21个整点{(x, y)0 ≤x <20,0 ≤y < 21,x ∈ Z,y ∈ Z),即横坐标是О到19(包含0和19)之间的整数、纵坐标是О到20(包含0和20)之间的整数的点。 请问这些点一共确定了多少条不同的直线。

points=[[x,y] for x in range(20) for y in range(21)] #创建二维列表:代表xy坐标系
docker=set()                            #创建集合属性的容器:因为集合里的元素不会重复
for i in points:                        #二重循环遍历每个坐标
    x1,y1=i[0],i[1]                     #注意书写格式:a,b=c,d
    for j in points:
      x2,y2=j[0],j[1]
      if x1==x2:                        #特殊情况:直线垂直时斜率不存在,先跳过最后计算
          continue
      k=(y2-y1)/(x2-x1)                 #斜率公式
      b=(x2*y1-x1*y2)/(x2-x1)           #截距公式
      if (k,b) not in docker:           #存入容器里没有的(斜率,截距)对
          docker.add((k,b))
print(len(docker)+20)                   #输出结果:容器的长度40237+斜率不存在的20种情况=40257

【问题描述】

小蓝有一个超大的仓库,可以摆放很多货物。 小蓝有n箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。 小蓝希望所有的货物最终摆成一个大的立方体。即在长、宽、高的方向上分别堆L、W、H的货物,满足n=LxW×H。 给定n,请问有多少种堆放货物的方案满足要求。 例如,当n = 4时,有以下6种方案:1×1x4、1×2×2、1x4×1、2×1×2、2×2×1、4×1×1。 请问,当n = 2021041820210418(注意有16位数字)时,总共有多少种方案?

def H(n):
    flag = 0
    for i in range(1,n+1):
        if n%i == 0:
            for j in range(1,n+1):
                if (n/i)%j == 0:
                        flag += 1
    return flag

print(H(2021041820210418))

【问题描述】

小明对数位中含有2、0、1、9的数字很感兴趣, 在1到40中这样的数包括1、2、9、10至32、39和40,共 28个,他们的和是574,平方和是14362. 注意,平方和是指将每个数分别平方后求和。 请问,在1到2019中,所有这样的数的平方和是多少?

def P (n):
    num = 0
    for i in range(1,n+1):
        if str(i).count('2')+str(i).count('0')+str(i).count('1')+str(i).count('9')>0:
            num = num + i*i
    return num

print(P(2019))
举报

相关推荐

0 条评论