蓝桥杯真题训练12

本文介绍了如何通过编程解决四个不同领域的技术问题:寻找1到2020之间既约分数的数量、计算256MB内存能存储的32位二进制整数、计算20世纪的星期一总数以及解析杨辉三角中特定数字的位置。展示了算法求解和数据结构在这些问题中的应用。
摘要由CSDN通过智能技术生成

蓝桥杯真题训练

1-既约分数

如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。请问,有多少个既约分数,分子和分母都是 1 到 2020 之间的整数

sum = 0
for i in range(1,2021):
    for j in range(1,2021):
        a1 = i
        a2 = j
        while a1 != a2:
            if a1>a2 :
                a1 = a1 - a2
            else:
                a2 = a2 - a1
        if(a1==a2==1):
            sum = sum +1
print(sum)

解题思路:这里这个题非常简单就是求最大公约数的公式方法要会。

2-空间

小蓝准备用 256MB256MB 的内存空间开一个数组,数组的每个元素都是 3232 位 二进制整数,如果不考虑程序占用的空间和维护内存需要的辅助空间,请问 256MB256MB 的空间可以存储多少个 3232 位二进制整数?

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

解题思路:记住32位二进制就是32个小bit。

3-星期一

整个 2020 世纪(19011901 年 11 月 11 日至 20002000 年 1212 月 3131 日之间),一共有多少个星期一

import datetime
a = datetime.date(1901,1,1)
b = datetime.date(2000,12,31)
d = datetime.timedelta(days=1)
sum = 0
while a<b:
  if a.weekday()==0:
    sum = sum +1
  a= a + d
print(sum)

解题思路:利用datetime模块进行while循环找到每个星期一。

4-杨辉三角形

如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列: 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,⋯
给定一个正整数 N,请你输出数列中第一次出现 N 是在第几个数?

n = int(input())
# 求组合数
def C(a, b):  
    res = 1
    fz = a #分子
    for fm in range(1,b+1): #1~b
        res = res * fz // fm#递推公式=分子//分母
        fz -= 1
        if res > n:
            return res
    return res

for k in range(16, -1, -1):
    l = 2 * k
    r = max(n, l)
    res = int(-1)
    while l <= r:
        mid = l + r >> 1
        if C(mid, k) >= n:
            res = mid
            r = mid - 1
        else:
            l = mid + 1
    if C(res, k) == n:
        print((res + 1) * res // 2 + k + 1)
        break

解题思路:主要是明白杨辉三角内的每个数其实是行列-1的组合数。然后取一半再根据对称轴元素的规律,进行二分查找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值