蓝桥题库刷题笔记

这篇博客主要记录了使用Python解决蓝桥题库中的一些问题,包括递增序列、算式问题和微生物增值等。在世纪末的星期问题中,作者深入探讨了Python的datetime模块,利用datetime.datetime(), datetime.weekday()和datetime.timedelta()来处理日期和星期。在实际解题过程中,作者发现set+permutation在处理某些问题时效率较低,而六角填数问题则需要转换思维,将六角星视为特殊的多数组进行处理。" 100876244,8752070,Vuex深度解析:概念、数据分块与实战方案,"['前端开发', 'Vue', '状态管理', 'Vuex框架']
摘要由CSDN通过智能技术生成

python解法

递增序列

在这里插入图片描述
划重点左下到右上排列,从左往右和从上往下是不同顺序(也就是算两种)

mat=['VLPWJVVNNZSWFGHSFRBCOIJTPYNEURPIGKQGPSXUGNELGRVZAG',
'SDLLOVGRTWEYZKKXNKIRWGZWXWRHKXFASATDWZAPZRNHTNNGQF',
'ZGUGXVQDQAEAHOQEADMWWXFBXECKAVIGPTKTTQFWSWPKRPSMGA',
'BDGMGYHAOPPRRHKYZCMFZEDELCALTBSWNTAODXYVHQNDASUFRL',
'YVYWQZUTEPFSFXLTZBMBQETXGXFUEBHGMJKBPNIHMYOELYZIKH',
'ZYZHSLTCGNANNXTUJGBYKUOJMGOGRDPKEUGVHNZJZHDUNRERBU',
'XFPTZKTPVQPJEMBHNTUBSMIYEGXNWQSBZMHMDRZZMJPZQTCWLR',
'ZNXOKBITTPSHEXWHZXFLWEMPZTBVNKNYSHCIQRIKQHFRAYWOPG',
'MHJKFYYBQSDPOVJICWWGGCOZSBGLSOXOFDAADZYEOBKDDTMQPA',
'VIDPIGELBYMEVQLASLQRUKMXSEWGHRSFVXOMHSJWWXHIBCGVIF',
'GWRFRFLHAMYWYZOIQODBIHHRIIMWJWJGYPFAHZZWJKRGOISUJC',
'EKQKKPNEYCBWOQHTYFHHQZRLFNDOVXTWASSQWXKBIVTKTUIASK',
'PEKNJFIVBKOZUEPPHIWLUBFUDWPIDRJKAZVJKPBRHCRMGNMFWW',
'CGZAXHXPDELTACGUWBXWNNZNDQYYCIQRJCULIEBQBLLMJEUSZP',
'RWHHQMBIJWTQPUFNAESPZHAQARNIDUCRYQAZMNVRVZUJOZUDGS',
'PFGAYBDEECHUXFUZIKAXYDFWJNSAOPJYWUIEJSCORRBVQHCHMR',
'JNVIPVEMQSHCCAXMWEFSYIGFPIXNIDXOTXTNBCHSHUZGKXFECL',
'YZBAIIOTWLREPZISBGJLQDALKZUKEQMKLDIPXJEPENEIPWFDLP',
'HBQKWJFLSEXVILKYPNSWUZLDCRTAYUUPEITQJEITZRQMMAQNLN',
'DQDJGOWMBFKAIGWEAJOISPFPLULIWVVALLIIHBGEZLGRHRCKGF',
'LXYPCVPNUKSWCCGXEYTEBAWRLWDWNHHNNNWQNIIBUCGUJYMRYW',
'CZDKISKUSBPFHVGSAVJBDMNPSDKFRXVVPLVAQUGVUJEXSZFGFQ',
'IYIJGISUANRAXTGQLAVFMQTICKQAHLEBGHAVOVVPEXIMLFWIYI',
'ZIIFSOPCMAWCBPKWZBUQPQLGSNIBFADUUJJHPAIUVVNWNWKDZB',
'HGTEEIISFGIUEUOWXVTPJDVACYQYFQUCXOXOSSMXLZDQESHXKP',
'FEBZHJAGIFGXSMRDKGONGELOALLSYDVILRWAPXXBPOOSWZNEAS',
'VJGMAOFLGYIFLJTEKDNIWHJAABCASFMAKIENSYIZZSLRSUIPCJ',
'BMQGMPDRCPGWKTPLOTAINXZAAJWCPUJHPOUYWNWHZAKCDMZDSR',
'RRARTVHZYYCEDXJQNQAINQVDJCZCZLCQWQQIKUYMYMOVMNCBVY',
'ABTCRRUXVGYLZILFLOFYVWFFBZNFWDZOADRDCLIRFKBFBHMAXX',]
s=0
for i in range(30):
    for j in range(50):
        #行
        for x in range(j+1,50):
            if(ord(mat[i][x])>ord(mat[i][j])):
                s+=1
        #列
        for y in range(i+1,30):
            if(ord(mat[y][j])>ord(mat[i][j])):
                s+=1
        #左上右下
        for (x,y) in zip(range(j+1,50),range(i+1,30)):
            if(ord(mat[y][x])>ord(mat[i][j])):
                s+=1
        #关键来了,根据题意从左下往右上和从右上往左下算两种方式
        for (x,y) in zip(range(j-1,-1,-1),range(i+1,30)):
            if(ord(mat[y][x])>ord(mat[i][j])):
                s+=1
            if(ord(mat[i][j])>ord(mat[y][x])):
                s+=1
print(s)#52800

算式问题

在这里插入图片描述

s=0
for i in range(123,988):
    for j in range(123,988):
        k=i+j
        if(k>123 and k<1000):
            m=str(k)+str(i)+str(j)
            if('0' not in m and len(set(m))==9):
                s+=1
print(s)

微生物增值

在这里插入图片描述
有点没搞懂,如果同时遇到Y分裂和X吃Y,到底是X先吃Y然后Y再繁殖还是先繁殖再被吃,按理来讲结果应该不同的,不过先繁殖和先吃的代码算出来结果一样,凌乱了

x,y=10,90
for i in range(1,121):
    a=x
    if(i%6==0):
        x*=2
    if(i%2==1):
        y-=a
    if(i%4==0):
        y*=2
print(y) #94371840

世纪末的星期

借这题再熟悉下python的datetime模块

datetime.datetime()

定义一个日期,变量为年、月、日、秒等

import datetime
start=datetime.datetime(1999,12,31)
print(start)
print(start.year)
print(start.month)
print(start.day)

输出结果:
在这里插入图片描述

datetime.weekday()

输出日期是星期几(0为星期一,6为星期天)

print(start.weekday())

输出结果:
在这里插入图片描述

datetime.timedelta()

进行时间加减的时候用这个来定义差值的单位是天、秒、微秒或者周(weeks)也行
在这里插入图片描述

题目

在这里插入图片描述

import datetime
timedelta=datetime.timedelta(days=1)
start=datetime.datetime(1999,12,31)
while(start.year<9999):
    if(int(start.year)%100==99 and start.month==12 and start.day==31 and start.weekday()==6):
        print(start.year)
        break
    start=start+timedelta

第39级台阶

用python做了这题才知道set+permutation的组合有多慢…
在这里插入图片描述
经典排列组合问题,用itertools的permutation+set()函数我跑了一个多小时跑了个寂寞,嘛都没有

s=0
for i in range(1,40):
    for j in range(2,40,2):
        if(i+j==39):
            mat=[]
            for x in range(i):
                mat.append('1')
            for y in range(j//2):
                mat.append('2')
            if(len(mat)%2==0):
                num1=1
                num2=1
                k=1
                start=i+j//2
                end=j//2
                for z in range(start,end,-1):
                    num1*=z
                    num2*=k
                    k+=1
                s+=num1//num2
print(s)

六角填数

在这里插入图片描述
把六角星看成一个特别的多数组就行了,建议画个图编号
在这里插入图片描述

m=[2,4,5,6,7,9,10,11,12]
arr=list(pm(m))
i=0
while(1):
    a=1+m[0]+m[1]+m[2]
    b=m[2]+m[3]+m[4]+m[5]
    c=1+m[7]+m[6]+m[5]
    d=8+m[0]+m[7]+m[8]
    e=8+m[1]+m[3]+3
    f=3+m[4]+m[6]+m[8]
    if(a==b and a==c and a==d and a==e and a==f):
        print(m[1])
        break
    else:
        i+=1
        m=arr[i]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值