蓝桥杯备赛(填空题)【Python B组】

发布于:2024-05-04 ⋅ 阅读:(32) ⋅ 点赞:(0)

一、弹珠堆放

问题描述

小蓝有 20230610 颗磁力弹珠,他对金字塔形状尤其感兴趣,如下图所示:

(图是盗来的啊,侵权请联系删除)


问题分析

找规律,第一层1个,第二层3个,第三层6个,第四层10个,第四层开始每一层都会在每一条边加一个点,中间加i个点(i=1,2……)


代码示例

ls=[1,3,6]
a=6
for i in range(1,1000):
    a=a+3+i
    ls.append(a) 
x=0
b=20230610
for i in ls:
    if b>=i:
        x+=1
        b-=i
    else:
        break
print(x)
#x=494

二、斐波那契与7

试题链接:斐波那契与7

问题描述


问题分析

我们先看前200项里面符合的都是哪几项(找规律),找出来是[14, 16, 17, 23, 34, 37, 43, 56, 74, 76, 77, 83, 94, 97, 103, 116, 134, 136, 137, 143, 154, 157, 163, 176, 194, 196, 197],这时候还观察不出来,我们再来做一个差分(第一项先不看)。这时候得出其差分列表为[2, 1, 6, 11, 3, 6, 13, 18, 2, 1, 6, 11, 3, 6, 13, 18, 2, 1, 6, 11, 3, 6, 13, 18, 2, 1],一下就看出来是有周期的,然后令n=202202011200-14,然后初始值x为1,就直接把第14项放进去了,然后每过60项,就会有8个满足的项,所以我们先让x+=(n//60)*8,然后对60取余数,然后再看最后这几项,对照着[2, 1, 6, 11, 3, 6, 13, 18]来看,能有几项符合要求。


代码示例

n=202202011200-14
ls=[2, 1, 6, 11, 3, 6, 13, 18]
x=1
x+=(n//60)*8
n=n%60
for i in ls:
    if n>=i:
        x+=1
        n-=i
    else:
        break
print(x)

三、字符串的个数

问题描述


问题分析

我们来求不满足的个数,然后用总数减去他。不满足分三种情况:①不含3但含7,则对每个位置我们都可以取1、2、4、5、6、7、8、9八个数,则有8**10000这么多个数,但是其中可能有3、7都不含的,有7**10000这么多个,所以其总个数为8**10000-7**10000;②不含7但含3, 同①,个数也为8**10000-7**10000;③不含3、7,则其总数为7**10000

再用总数9**10000减去这三种类型的总数,即可得出答案,并对10**9+7取余数


代码示例

a=7**10000
b=8**10000
c=9**10000
x=c-2*b+a
y=10**9+7
x=x%y
print(x)


网站公告

今日签到

点亮在社区的每一天
去签到