python蓝桥杯真题刷题打卡 | day3

博客涵盖了多个数学与编程问题的解决方案,包括蛇形填数的规律及代码实现,棋盘放麦子的经典问题,通过计算得出2的64次方减1的结果;探讨了既约分数的概念,通过暴力计算找出一定范围内互质的数对数量;还涉及到了时间和空间效率的跑步锻炼算法,以及计算256MB存储空间在32位系统中占用的字节数;最后是数列求值的问题,通过循环计算得出特定序列的末四位数字。

蛇形填数

在这里插入图片描述
数据:

1 2 6 7 15 ...
3 5 8 14 ...
4 9 13 ...
10 12 ...
11 ...
...

规律及代码:
在这里插入图片描述

第1行    1
第2行    5     1+  4*1
第3行   13     5+  4*2
第4行   25     13+ 4*3
#  代码 
res=1
for i in range(1,20):
  res += 4*i

print(res)

棋盘放麦子

2012 填空题 省赛

在这里插入图片描述

import os
import sys

# 请在此输入您的代码
print(2**64-1)

既约分数

2021 省赛 填空
在这里插入图片描述
直接暴力

import os
import sys
import math 
# 请在此输入您的代码
c=0
for i in range(1,2021):
    for j in range(1,2021):
    	# math.gcd(i,j)  求i,j的最大公约数,如果是1,说明是
        if math.gcd(i,j)==1:
            c+=1
print(c)


最小公倍数

def lcm(x, y):
    """
    :return: 最小公倍数
    """
    #  获取最大的数
    if x > y:
        greater = x
    else:
        greater = y

    while (True):
        if ((greater % x == 0) and (greater % y == 0)):
            lcm = greater
            break
        greater += 1

    return lcm

最大公约数

def hcf(x, y):
    """
    :return: 该函数返回两个数的最大公约数
    """
    # 获取最小值
    if x > y:
        smaller = y
    else:
        smaller = x

    for i in range(1, smaller + 1):
        if ((x % i == 0) and (y % i == 0)):
            num = i
            
    return num

跑步锻炼

填空 2020 省赛
在这里插入图片描述
代码:

import os
import sys

# 请在此输入您的代码
import datetime

start = datetime.date(2000, 1, 1)
end = datetime.date(2020, 10, 1)
days = datetime.timedelta(days=1)
ans = 0

while end >= start:
    #   月初         或        星期一
    if start.day == 1 or start.weekday() == 0:
        ans += 2
    else:
        ans += 1
    start += days
print(ans)

空间

2021 省赛 普通填空
在这里插入图片描述
分析及代码:

# 256MB = 256 * 1024 *1024 (B)
# 32bit = 32//8 (B)  
  这里区分一下  
# 32位二进制可表示的数       2**32
  32位二进制所占的存储空间   32//8   


total = 256*1024*1024
a = 32//8
print(total//a)

数列求值

2019 填空 省赛
在这里插入图片描述
代码:
注意 这道题不能用递归,时间太长,栈内存不够

a, b, c, d = 1, 1, 1, 0
for i in range(4, 20190325):
	# 因为要最后4位数字  我们只需要低位数字的变化
	# 高位数字可以丢掉,减少运行时间
    d = (a + b + c) % 10000 
    a, b, c = b, c, d
print(a, b, c, d)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lijiamingccc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值