蓝桥杯备赛日常 python 3-17

发布于:2025-03-18 ⋅ 阅读:(22) ⋅ 点赞:(0)

历届填空题:

1.15届

随着2024 年的钟声回荡,传说中的时空之门再次敞开。这扇门是一条神秘的通道,它连接着二进制和四进制两个不同的数码领域,等待着勇者们的探索。

在二进制的领域里,勇者的力量被转换成了力量数值的二进制表示中各数位之和。

在四进制的领域里,力量的转换规则相似,变成了力量数值的四进制表示中各数位之和。

穿越这扇时空之门的条件是严苛的:当且仅当勇者在二进制领域的力量等同于四进制领域的力量时,他才能够成功地穿越。

国王选定了小蓝作为领路人,带领着力量值从 1 到 2024 的勇者们踏上了这段探索未知的旅程。作为小蓝的助手,你的任务是帮助小蓝计算出,在这 2024 位勇者中,有多少人符合穿越时空之门的条件。

代码:

def main():
    # 请在此处编写代码
    def convert_two(n):
        sum=0
        while(n>0):
            a=n%2
            sum+=a
            n=n//2
        return sum
    def convert_four(n):
        sum=0
        while(n>0):
            a=n%4
            sum+=a
            n=n//4
        return sum
    count=0
    for i in range(1,2025):
        if(convert_four(i)==convert_two(i)):
            count+=1
    print(count)
        
if __name__ == "__main__":
    main()

2.

小蓝想要构造出一个长度为 10000 的数字字符串,有以下要求:小蓝不喜欢数字 0,所以数字字符串中不可以出现 0;小蓝喜欢数字 3 和 7,所以数字字符串中必须要有 3 和 7 这两个数字。

请问满足题意的数字字符串有多少个?这个数字会很大,你只需要输出其对 10 ^9+7 取余后的结果。

代码:

def main():
    # 请在此处编写代码
    M=1000000000+7
    a=pow(9,10000,M)
    b=2*pow(8,10000,M)
    c=pow(7,10000,M)
    print((a-b+c)%M)
if __name__ == "__main__":
    main()

14届:

1.

思路:我们把数字转为字符串,然后按顺序统计‘2’,‘0’,‘2’,‘3’分别出现的次数,如果先遇到了2,那么count1++,如果遇到了0,前面如果有2,说明count1>0,那么此时的0才有可能构成20,所以如果遇到的是0且前面已经有了2,那么count2++,以此类推,如果再次遇到2,如果count2>0说明已经有202了,就很有可能构成2023,那么count3++,如果遇到3,前面count3>0,就可以构成2023了,我们统计出所有能构成2023的数字后,记得相减,代码超时,运行出来结果正确。

代码:

def main():
    # 请在此处编写代码
    def include_2023(n):
        a=list(str(n))
        count1=0
        count2=0
        count3=0
        result=0
        for i in range(len(a)):
            if a[i]=='2':
                count1+=1
            if a[i]=='0':
                if(count1>0):
                    count2+=1
            if a[i]=='2':
                if(count2>0):
                    count3+=1
            if a[i]=='3':
                if(count3>0):
                    result=1
        return result

    count = 0
    for i in range(12345678, 98765433):
        if (include_2023(i) == 1):
            count += 1
    print(98765433 - 12345678 - count)
if __name__ == "__main__":
    main()

提交:

def main():
    # 请在此处编写代码
    print(85959030)
if __name__ == "__main__":
    main()

2.

先理解一下题目:一共有2023种不同面值的硬币,所以面值就是1-2023;第i种硬币面值为i,数量也为i;也就是面值为1的硬币有一个,面值为2的硬币有2个,以此类推,面值为2023的硬币有2023个;硬币是两两兑换,所以可兑换的面值是2-4046;我们从2遍历到4046,记录每个面值被兑换的个数,取最大值,在兑换过程中,总面值由两个面值 j 和 k 构成,j+k=i;所以j<=i//2,如果j==k,说明两个面值相同,那么一次兑换个数就是之前兑换的加上a[j]//2(也就是j的个数,因为j与k相同,所以把j消耗完也就兑换完了。如果不相同,那兑换个数就是最少的面值数目,最后总数目等于count+原来就有的面值数a[i]

代码:

def main():
    # 请在此处编写代码
    a=[0]*5000
    ans=0
    for i in range(1,2024):
        a[i-1]=i
    for i in range(2,5000):
        count=0
        for j in range(1,i//2+1):
            k=i-j
            if k==j:
                count+=a[j]//2
            else:
                count+=min(a[j],a[k])
        count+=a[i]
        ans=max(ans,count)
    print(ans)
        
if __name__ == "__main__":
    main()

 13届:

代码:

def main():
    # 请在此处编写代码
    n=input()
    a=list(n)
    b=sorted(a)
    str=''
    for i in b:
        str+=i
    print(str)
if __name__ == "__main__":
    main()

def main():
    # 请在此处编写代码
    print(2022040920220409)
if __name__ == "__main__":
    main()