一、弹珠堆放
问题描述
小蓝有 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)