第十六届蓝桥杯模拟赛(第三期Python)

这跟真题的难度差十万八千里了,只能用来加强一下自信,除了最后一题,其他都比较简单

1.最大质数

【问题描述】
如果一个数 p 是个质数,同时又是整数 a 的约数,则 p 称为 a 的一个质因数。

请问, 2024 的最大的质因数是多少?

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
【代码】

def is_prime(n):
    for i in range(2,int(n**0.5)+1):
        if n%i==0:
            return False
    return True


n=2024

for i in range(2023,1,-1):
    if n%i==0 and is_prime(i):
        print(i)
        break

答案
23

知识点

求质数

2. 最小公倍数

【问题描述】
对于两个整数 a, b,既是 a 的整数倍又是 b 的整数倍的数称为 a 和 b 的公倍数。公倍数中最小的正整数称为 a 和 b 的最小公倍数。

请问, 2024 和 1024 的最小公倍数是多少?

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【代码】

import  math

c=math.gcd(2024,1024)
print(2024*1024//c)

#259072

答案
259072

知识点

求最小公倍数,注意比赛配置环境python版本为3.8.6,不带math.lcm函数(3.9及以后版本才有)

3.质因数之和

【问题描述】
如果一个数 p 是个质数,同时又是整数 a 的约数,则 p 称为 a 的一个质因数。

请问, 2024 的所有质因数的和是多少?

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【代码】

def is_prime(n):
    for i in range(2,int(n**0.5)+1):
        if n%i==0:
            return False
    return True


n=2024

sum1=0
for i in range(2023,1,-1):
    if n%i==0 and is_prime(i):
        print(i)
        sum1+=i

print(sum1)

#36

答案
36

知识点

又是求质数,得,今年肯定不考质数了

4.最大的质数

【问题描述】
请问,在不超过 2024 的数中,最大的质数是多少?

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【代码】

def is_prime(n):
    for i in range(2,int(n**0.5)+1):
        if n%i==0:
            return False
    return True


n=2024

sum1=0
for i in range(2023,1,-1):
    if is_prime(i):
        print(i)
        break

#2017

答案
2017

知识点

求质数

5.互质的数

【问题描述】
如果两个整数 a, b 除了 1 以外,没有其它的公约数,则称整数 a 与 b 互质。

请问,与 2024 互质的数中(包括1),第 2024 小的数是多少?

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【代码】

import math
def is_prime(n):
    for i in range(2,int(n**0.5)+1):
        if n%i==0:
            return False
    return True


n=2024
N=2024
cnt=0
i=0
while cnt

答案
4655

知识点

求质数

6.最大出现子串

【问题描述】
对于字符串 S=ANQNANBNQNANQNQNBNINQNQNANQNINANQNANBNQNANQNQNBNBNQNQNANQNINANQNANBNQNANQNQNBNINQNQNANQNINBNQNANBNQN ,请找到 S 的一个长度不超过 10 的子串 A,使得(A的长度)乘以(A在S中出现的次数)最大。

请问这个子串是什么?(如果有多个满足条件的,请回答字典序最小的)。

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个字符串,在提交答案时只填写这个字符串,填写多余的内容将无法得分。

【代码】

s='ANQNANBNQNANQNQNBNINQNQNANQNINANQNANBNQNANQNQNBNBNQNQNANQNINANQNANBNQNANQNQNBNINQNQNANQNINBNQNANBNQN'
possible_ans=[]#乘积
zfc=[]#存放所有子串
for i in range(len(s)):#第一个字母
    for j in range(i,len(s)):#最后一个字母
        if j-i>10:#长度不超过10
            break
        a=s[i:j]
        b=s.count(a)
        c=len(a)*b
        zfc.append(a)
        possible_ans.append(c)
print(zfc[possible_ans.index(max(possible_ans))])
print(max(possible_ans))
#NQN

答案
NQN

知识点

  1. 模拟

7. 01串个数

【问题描述】
如果一个字符串中只包含字符 0 和字符 1,则称为一个 01 串(包含全为 0 的串和全为 1 的串)。

请问有多少个长度为 24 的 01 串,满足任意 5 个连续的位置中不超过 3 个位置的值为 1 。

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【代码】

ans=0
for i in range(1<<24):
    c=f'{i:>024b}'
    for j in range(21):#第一位的位置
        if c[j:j+5].count('1')>3:
            break
    else:
        ans+=1
    

print(ans)
# print(2963628)

答案
2963628

知识点

  1. 位运算
  2. 字符串操作:s.count()
  3. f-string格式化输出
    f'{i:>024b}:向右对齐,宽度限制为24位,不足的在左面补0,二进制格式
    更多细节内容,可以在这里看
    蓝桥杯笔记

8.玉米地

【问题描述】
小蓝种了一块玉米地,玉米地长 n 米,宽 m 米,每平方米产玉米 a 千克。请问小蓝的玉米地一共能产多少千克玉米?

【输入格式】
输入三行。第一行包含一个正整数 n ,第二行包含一个正整数 m ,第三行包含一个正整数 a 。

【输出格式】
输出一行,包含一个整数,表示答案。

【样例输入】
20
24
900
【样例输出】
432000
【评测用例规模与约定】
对于所有评测用例,1 <= n <= 1000, 1 <= m <= 1000, 1 <= a <= 2000。

n=int(input())
m=int(input())
a=int(input())

print(n*m*a)

9. 再创新高

【问题描述】
小蓝有一个数组 a[1], a[2], …, a[n], 一个“再创新高”的位置是指一个位置 p ,a[p] 的值比之前每个位置的值都大。

请求出小蓝的数组中有多少个再创新高的位置。

【输入格式】
输入的第一行包含一个整数 n 。

第二行包含 n 个整数,相邻数之间使用一个空格分隔,依次表示 a[1], a[2], …, a[n] 。

【输出格式】
输出一行,包含一个整数,表示答案。

【样例输入】
8
1 2 3 4 5 6 6 6
【样例输出】
6
【样例输入】
9
3 2 1 6 5 4 9 8 7
【样例输出】
3
【评测用例规模与约定】
对于 30% 的评测用例,1 <= n <= 100,0 <= a[i] <= 1000。

对于 60% 的评测用例,1 <= n <= 1000,0 <= a[i] <= 1000。

对于所有评测用例,1 <= n <= 10000,0 <= a[i] <= 1000000。
【代码】

n=int(input())

data=list(map(int,input().split()))

ans=0
max1=float('-inf')
for i in range(len(data)):
    max2=max1
    max1=max(max1,data[i])
    if max1!=max2:
        ans+=1
print(ans)

知识点

  1. 无穷小:float('-inf')

10. 字符串拼接

【问题描述】
给定四个字符串 a, b, c, d,请将这四个字符串按照任意顺序依次连接拼成一个字符串。

请问拼成的字符串字典序最小是多少?

【输入格式】
输入四行,每行包含一个字符串。

【输出格式】
输出一行包含一个字符串,表示答案。

【样例输入】
LAN
LAN
QIAO
BEI
【样例输出】
BEILANLANQIAO
【评测用例规模与约定】
对于所有评测用例,输入的字符串非空串,由大写字母组成,长度不超过 1000 。
【代码】

from itertools import permutations

data=[]
n=4
while n!=0:
    a=input()
    data.append(a)
    n-=1
possible_ans=[]
for i in permutations(data,4):
    a=list(i)
    b=''.join(a)
    possible_ans.append(b)

print(min(possible_ans))

知识点

  1. 排列组合,python就是好,itertools库函数
  2. ''.join():直接连接元素,没有任何符号
    更多细节内容,可以在这里看
    蓝桥杯笔记

11.礼物发放

【问题描述】
蓝桥村正在给村民们发放礼物。礼物通过一个礼物发放机完成。

村民们在机器前排着队领取礼物。

每个礼物有一个价值 v[i] ,有的高,有的低。每位村民有自己对于礼物的期望值 e[i] 。

礼物发放机每次会显示一个礼物,如果礼物的价值大于等于村民的期望值,村民就会高兴地把礼物拿走,并离开礼物发放机。如果礼物的价值比村民的期望值低,村民会让这个礼物取消,并让礼物发放机显示下一个礼物,并重新检查是否满足期望。村民会重复让礼物发放机显示下⼀个礼物,直到礼物发放机没有更多可以显示的礼物或礼物的价值大于等于自己的期望值。

如果礼物发放机中的所有礼物都显示完了,那么还没领到礼物的村民就无法领取礼物了。

如果所有的村民都领到了礼物,而礼物发放机还有礼物显示,村民们也不会再领取礼物。

现在,小蓝知道了每位村民的期望值,也知道了礼物发放机上礼物的显示顺序,请问总共有多少村民拿到了礼物?

【输入格式】
输入的第一行包含一个整数 n ,表示村民的个数。

第二行包含 n 个整数,相邻数之间使用一个空格分隔,依次表示排队的每位村民的期望值 e[i] 。

第三行包含一个整数 m ,表示礼物发放机会显示的礼物个数。

第四行包含 m 个整数,相邻数之间使用一个空格分隔,依次表示礼物发放机显示的礼物的价值 v[i] 。

【输出格式】
输出一行,包含一个整数,表示答案。

【样例输入】
6
6 5 5 3 6 0
9
9 9 8 2 4 4 3 5 3
【样例输出】
4
【样例说明】
前 4 位村民依次取到了第 1, 2, 3, 5 件礼物。后面的礼物未能满足第 5 位村民。

【评测用例规模与约定】
对于 30% 的评测用例,1 <= n, m <= 20 , 0 <= e[i], v[i] <= 100 。

对于 60% 的评测用例,1 <= n, m <= 300 , 0 <= e[i], v[i] <= 10000 。

对于所有评测用例,1 <= n, m <= 10000 , 0 <= e[i], v[i] <= 1000000 。

【代码】

n=int(input())
e=list(map(int,input().split()))

m=int(input())
v=list(map(int,input().split()))

ans=0

i=0#第一位村民
j=0#第一个礼物
while i

知识点

简单模拟,没有什么知识点

12.最大的十字

【问题描述】
小蓝有一个 n 行 m 列的矩阵 a[i][j] ,他想着矩阵中找出一个“十”字形状的区域,使得区域内的值的和最大。

一个“十”字形状的区域可以由两个行号 r1 、 r2 和两个列号 c1 、 c2 表示。“十”字的区域内包括第 r1 行到 r2 行的所有元素,以及第 c1 列到 c2 列的所有元素,既不在这几行也不在这几列的元素不在区域内。

为了保证是一个“十”字的形状,必须满足 1 < r1 <= r2 < n,1 < c1 <= c2 < m。

【输入格式】
输入的第一行包含两个整数 n, m ,分别表示行数和列数。

接下来 n 行,每行包含 m 个整数,相邻数之间使用一个空格分隔,依次表示矩阵的每行每列的值,本部分的第 i 行第 j 列表示 a[i][j] 。

【输出格式】
输出一行包含一个整数,表示最大的和。

【样例输入】
5 6
1 -1 2 -2 3 -3
-1 2 -2 3 -3 4
2 -2 3 -3 4 -4
-2 3 -3 4 -4 5
3 -3 4 -4 5 -5
【样例输出】
14
【样例说明】
有两种方法可以得到最大的和。第一种是取 r1=2, r2=4, c1=3, c2=5,第二种是取 r1=2, r2=4, c1=5, c2=5 。

【评测用例规模与约定】
对于 30% 的评测用例,3 <= n, m <= 30 ,-1000 <= a[i][j] <= 1000 。

对于 60% 的评测用例,3 <= n, m <= 100 ,-1000 <= a[i][j] <= 1000 。

对于所有评测用例,3 <= n <= 100, 3 <= m <= 5000 ,-1000 <= a[i][j] <= 1000 。

【代码】
这一题难度有点儿大啊,实在不会,等我学完再回来看看

你可能感兴趣的:(蓝桥杯,python,蓝桥杯,算法)