蓝桥杯系列5——填空题练习

简介: 蓝桥杯系列5——填空题练习

心得

做小题的时候,主要目标是找如何做的又快又准。

做完这些题,最大的感觉是,题目虽然不难,但是很多坑(很大可能是自己基础太差了(ಥ_ಥ) )

题目一

(1)一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成 的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 个。 注意在计算时,只算本质不同的串的个数。 请问,字符串0100110001010001 有多少个不同的非空子串?

s = '0100110001010001'
subs = []
for i in range(len(s)+1):
    for j in range(i+1, len(s)+1):
        if(s[i:j] not in subs):
            subs.append(s[i:j])
print(len(subs))
100

题目二

(2)给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求 第 20190324 项的最后 4 位数字。

a=[1 for _ in range(3)]
print(a[0])
for i in range(3,20190324,1):
#     print(a[i-1])
    a.append((a[i-3]+a[i-2]+a[i-1])%10000)
print(a[20190323])
1
4659

总结

①一定要注意range从0开始

②列表初始化a=[1 for _ in range(3)],列表添加元素a.append(1)

题目三

(3)把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包 含数字 2 和 4,一共有多少种不同的分解方法? 注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。

tmp = 0
def check(n):
    for i in str(n):
        if i == '2' or i == '4':
            return False
    return True
for i in range(1,2018):
    for j in range(i+1,2018):
        k = 2019-i-j
        if k >j and check(i) and check(j) and check(k):
            tmp = tmp + 1
print(tmp)
40785
def check(n):
    for i in str(n):
        if i == '2' or i == '4':
            print(1)
            return False
    return True
print(check(2))
1
False

总结

①注意审题:各不相同的正整数

②小题尽可能准确,不要在意时间复杂度等

③注意==的比较对象,如果是字符串要交""

题目四

(4)年号字串

小明用字母 A 对应数字1,B 对应2,以此类推,用 Z 对应26。对于27以上的数字,小明用两位或更长位的字符串来对应,例如AA 对应 27,AB 对应28,AZ 对应52,LQ 对 329。

请问2019 对应的字符串是什么?

str1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
yu = []
num=2019
while num >= 26:
    yu.append(num%26)
    num = num//26
yu.append(num)
print(yu)
for i in yu[::-1]:
    print(str1[i-1],end='')
[17, 25, 2]
BYQ

(5)卡片

count = 0
for i in range(10000):
    if count > 2019:
        print(i-1)
        break
    for j in str(i):
        if j == "1":
            count = count+1
3181

总结

①数字1用的最快

②注意判断和循环的先后关系

#出现次数最多的数
n = int(input())
num = list(map(int,input().split()))
b = list(set(num))#化为集合,去掉相同数
b.sort()#从小到大排序
s = dict(zip(b,map(num.count,b)))#将数与它的出现次数组合再转为字典
print(s)
print(max(s,key=s.get))#根据字典值选出count最大的数
6
10 1 10 20 30 20
{1: 1, 10: 2, 20: 2, 30: 1}
10

题目五

(5)数字中包含2019

n = int(input())
s = 0
for i in range(1, n + 1):
    a = i
    while a != 0:
        temp = a % 10
        a = int(a / 10)
        if temp in [2, 0, 1, 9]:
            s += i
            falg = True
            break
print(s)
40
574
n = 40
sum1 = 0
for i in range(1,n+1):
    for j in str(i):
        if j == "2" or j == "0" or j == "1" or j =="9":
            sum1 = sum1 + i
            break
print(sum1)
574

题目六

(6)跑步

小明坚持每天跑步,正常情况下每天跑一公里,如果这一天是周一或者月初(每月的一号),那么小明就会跑两公里(如果这一天既是周一,又是月初,小明也是跑两公里),小明从2000年1月1日(周六)一直坚持到了2020年10月1日(周四),请你计算一下小明共跑了多少公里?

from datetime import *
start = date(2000,1,1)
end = date(2020,10,2)
tmp = timedelta(days = 1)
ans = 0
while start != end:
    if start.weekday() == 0 or start.day == 1:
        ans += 2
    else:
        ans += 1
    start = start + tmp
print(ans)
8879
from datetime import *
start = date(2000,1,1)
end = date(2000,1,7)
tmp = timedelta(days = 1)
while start != end:
    if start.weekday() == 6:
        print(start,"start.weekday() == 6")
    if start.day == 1:
        print(start,"start.day == 1")
    start = start + tmp
print(ans)
2000-01-01 start.day == 1
2000-01-02 start.weekday() == 6
6054

总结

①datetime库

②start.weekday() == 0判断是否为星期一

③start.day == 1判断是否为月初第一天

题目七

(7)矩形切割

a = 2019
b = 324
i = 0
while min(a,b)>0:
    if a>b:
        a=a-b
    elif b>a:
        b=b-a
    else:
        break
    i = i+1
print(i+1)
21
目录
相关文章
|
1月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-992 士兵杀敌(二)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-992 士兵杀敌(二)
37 1
|
1月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
65 0
|
1月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
51 0
|
1月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
50 0
|
1月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-997 粘木棍
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-997 粘木棍
60 0
|
1月前
|
机器学习/深度学习 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-996 车的放置
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-996 车的放置
54 0
|
1月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-986 藏匿的刺客
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-986 藏匿的刺客
53 0
|
1月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-985 幸运的店家
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-985 幸运的店家
49 0
|
1月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-983 最大获利
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-983 最大获利
55 0
|
1月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-982 最小距离
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-982 最小距离
33 0