第十一届蓝桥杯大赛第二次模拟(软件类Python3)

第十一届蓝桥杯大赛第二次模拟(软件类Python3)

第十一届蓝桥杯大赛第二次模拟(软件类Python3)

题目以及部分思路原文链接:https://blog.csdn.net/weixin_43964993/article/details/108308834

1. 12.5MB

【问题描述】
在计算机存储中,12.5MB是多少字节?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

''' 思路: 1MB = 1024KB 1KB = 1024B(字节) '''
#实现:
print(int(12.5*1024**2))
#结果
13107200

2. 最多边数

【问题描述】
一个包含有2019个结点的有向图,最多包含多少条边?(不允许有重边)
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

''' 思路: 有向图,最多就是全连接(补充:有向图是无向图的两倍) 有2019个点,每个点都由自身方向到其他点,有2018条。所以2019*2018 '''
#实现:
print(2019*2018)
#结果
4074342

3. 单词重排

【问题描述】
将LANQIAO中的字母重新排列,可以得到不同的单词,如LANQIAO、AAILNOQ等,注意这7个字母都要被用上,单词不一定有具体的英文意义。
请问,总共能排列如多少个不同的单词。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

python 思路: 排练组合问题:选择两个位置让A占,C72 ,剩下五个进行全排练A55

#实现:
if __name__ == '__main__':
    a = 7*6/2
    b = 1*2*3*4*5
    print(int(a*b))
#结果
2520

​4. 括号序列

【问题描述】
由1对括号,可以组成一种合法括号序列:()。
由2对括号,可以组成两种合法括号序列:()()、(())。
由4对括号组成的合法括号序列一共有多少种?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

''' 思路:进行枚举 位置1为一个括号共5个 () () () () () (()) () () () (()) () ((())) () (()()) 位置1为两个括号共2个 (()) () () (()) (()) 位置1为三个括号共2个 ((())) () (()()) () 位置1为四个括号共5个 (((()))) (()()()) (()(())) ((())()) ((()())) 5+2+2+5=14 '''
#结果:
14

5. 反倍数

【问题描述】
给定三个整数 a, b, c,如果一个整数既不是 a 的整数倍也不是 b 的整数倍还不是 c 的整数倍,则这个数称为反倍数。
请问在 1 至 n 中有多少个反倍数。
【输入格式】
输入的第一行包含一个整数 n。
第二行包含三个整数 a, b, c,相邻两个数之间用一个空格分隔。
【输出格式】
输出一行包含一个整数,表示答案。
【样例输入】
30
2 3 6
【样例输出】
10
【样例说明】
以下这些数满足要求:1, 5, 7, 11, 13, 17, 19, 23, 25, 29。
【评测用例规模与约定】
对于 40% 的评测用例,1 <= n <= 10000。
对于 80% 的评测用例,1 <= n <= 100000。
对于所有评测用例,1 <= n <= 1000000,1 <= a <= n,1 <= b <= n,1 <= c <= n。

''' 思路1: 一一列举进行比较判断 '''
#实现:
n = int(input())
a,b,c=map(int,input().split())
count = 0
for i in range(1,n+1):
    if i%a!=0 and i%b!=0 and i%c!=0:
        count += 1
print(count)

''' 思路2: 创建一个新列表,如果出现倍数就将其删除 '''
#实现:
n = int(input())
a,b,c=map(int,input().split())
lst = [i for i in range(1,n+1)]
for i in range(1,n+1//min(a,b,c)):
    if i*a in lst:
        lst.remove(i*a)
    if i * b in lst:
        lst.remove(i*b)
    if i * c in lst:
        lst.remove(i*c)
print(len(lst))

6. 凯撒加密

【问题描述】
给定一个单词,请使用凯撒密码将这个单词加密。
凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移3位后被替换成密文。即a变为d,b变为e,…,w变为z,x变为a,y变为b,z变为c。
例如,lanqiao会变成odqtldr。
【输入格式】
输入一行,包含一个单词,单词中只包含小写英文字母。
【输出格式】
输出一行,表示加密后的密文。
【样例输入】
lanqiao
【样例输出】
odqtldr
【评测用例规模与约定】
对于所有评测用例,单词中的字母个数不超过100。

''' 思路: 充分利用python中ord()和chr()函数; 特别的需要注意‘xyz’的下一个应该是‘abc’ '''
#实现:
str1 = input()
str2 = ''
for i in str1:
    if 'z'>= i >= 'x':
        str2 += chr(ord(i)-23)
    else:
        str2 += chr(ord(i)+3)
print(str2)

在python中,字符串是不可变对象,不能通过下标的方式直接赋值修改。同样的不可变对象还有:数字、字符串和元组。

7. 螺旋

【问题描述】
对于一个 n 行 m 列的表格,我们可以使用螺旋的方式给表格依次填上正整数,我们称填好的表格为一个螺旋矩阵。
例如,一个 4 行 5 列的螺旋矩阵如下:
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
【输入格式】
输入的第一行包含两个整数 n, m,分别表示螺旋矩阵的行数和列数。
第二行包含两个整数 r, c,表示要求的行号和列号。
【输出格式】
输出一个整数,表示螺旋矩阵中第 r 行第 c 列的元素的值。
【样例输入】
4 5
2 2
【样例输出】
15
【评测用例规模与约定】
对于 30% 的评测用例,2 <= n, m <= 20。
对于 70% 的评测用例,2 <= n, m <= 100。
对于所有评测用例,2 <= n, m <= 1000,1 <= r <= n,1 <= c <= m。

''' 思路: 1.首先创建全空矩阵 2.算出生长步长向量 3.根据生长步长向量判断行走方向 4.填充数字 '''
#实现:
n,m = map(int,input().split())
r,c = map(int,input().split())

def Matrix(n,m,r,c):
    #创建空矩阵
    lst = [[None for i in range(m)] for j in range(n)]
    #print(lst)
    #创建生长步长向量
    a = m
    b = n-1
    remote_lst = []
    while a>=1 and b >=1:
        remote_lst.append(a)
        remote_lst.append(b)
        a -= 1
        b -= 1
    remote_lst.append(a)
    #print(remote_lst)

    #给矩阵赋值数字
    lie,hang,rt,count = -1,0,0,0
    for i in range(1,n*m+1):
        if count == remote_lst[rt]:
            count = 0
            rt += 1
        count += 1

        #转向
        if rt % 4 == 0:
            lie +=1
        elif rt % 4 == 1:
            hang +=1
        elif rt % 4 == 2:
            lie -=1
        elif rt % 4 == 3:
            hang -=1
        lst[hang][lie] = i
    #查看螺旋矩阵
    # for i in range(len(lst)):
    # print(lst[i])
    return lst[r-1][c-1]

print(Matrix(n,m,r,c))

8. 摆动序列

【问题描述】
如果一个序列的奇数项都比前一项大,偶数项都比前一项小,则称为一个摆动序列。即 a[2i]<a[2i-1], a[2i+1]>a[2i]。
小明想知道,长度为 m,每个数都是 1 到 n 之间的正整数的摆动序列一共有多少个。
【输入格式】
输入一行包含两个整数 m,n。
【输出格式】
输出一个整数,表示答案。答案可能很大,请输出答案除以10000的余数。
【样例输入】
3 4
【样例输出】
14
【样例说明】
以下是符合要求的摆动序列:
2 1 2
2 1 3
2 1 4
3 1 2
3 1 3
3 1 4
3 2 3
3 2 4
4 1 2
4 1 3
4 1 4
4 2 3
4 2 4
4 3 4
【评测用例规模与约定】
对于 20% 的评测用例,1 <= n, m <= 5;
对于 50% 的评测用例,1 <= n, m <= 10;
对于 80% 的评测用例,1 <= n, m <= 100;
对于所有评测用例,1 <= n, m <= 1000。

9. 通电

【问题描述】
2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。
这一次,小明要帮助 n 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。
现在,这 n 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。
小明测量了所有村庄的位置(坐标)和高度,如果要连接两个村庄,小明需要花费两个村庄之间的坐标距离加上高度差的平方,形式化描述为坐标为 (x_1, y_1) 高度为 h_1 的村庄与坐标为 (x_2, y_2) 高度为 h_2 的村庄之间连接的费用为
sqrt((x_1-x_2)(x_1-x_2)+(y_1-y_2)(y_1-y_2))+(h_1-h_2)*(h_1-h_2)。
在上式中 sqrt 表示取括号内的平方根。请注意括号的位置,高度的计算方式与横纵坐标的计算方式不同。
由于经费有限,请帮助小明计算他至少要花费多少费用才能使这 n 个村庄都通电。
【输入格式】
输入的第一行包含一个整数 n ,表示村庄的数量。
接下来 n 行,每个三个整数 x, y, h,分别表示一个村庄的横、纵坐标和高度,其中第一个村庄可以建立发电站。
【输出格式】
输出一行,包含一个实数,四舍五入保留 2 位小数,表示答案。
【样例输入】
4
1 1 3
9 9 7
8 8 6
4 5 4
【样例输出】
17.41
【评测用例规模与约定】
对于 30% 的评测用例,1 <= n <= 10;
对于 60% 的评测用例,1 <= n <= 100;
对于所有评测用例,1 <= n <= 1000,0 <= x, y, h <= 10000。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100086.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号