2020.03.22蓝桥杯校内模拟赛题解上(Python)

发现大多数的题解都不是Python解决的,就写这篇文章来用Python解决模拟赛题。当然因为是看着题目写的,并不能保证能通过全部样例,也希望有什么错误,大佬们能够指出来。这篇文章只有1-7题,后续有空就写后三题(当然也有可能写不出来)

题目

    • 1.单位换算
    • 2.正约数
    • 3.数字9
    • 4.最多叶结点
    • 5.单词分段
    • 6 .数位递增
    • 7.递增三元组

1.单位换算

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

2.正约数

问题描述
  1200000有多少个约数(只计算正约数)。
答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
代码实现

count = 0
for i in range(1,1200001):
    if 1200000%i == 0:
        count +=1
print(count)
#答案为96

3.数字9

问题描述
  在1至2019中,有多少个数的数位中包含数字9?
  注意,有的数中的数位中包含多个9,这个数只算一次。例如,1999这个数包含数字9,在计算只是算一个数。
答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
代码实现

count = 0
for i in range(1,2020):
    s = str(i)
    if '9' in s:
        count += 1
print(count)
#答案为544

4.最多叶结点

问题描述
  一棵包含有2019个结点的二叉树,最多包含多少个叶结点?
答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
这里有两个公式:
总结点=叶子节点数+度为1的节点数+度为2的节点数
叶子节点数=度为2的节点数+1
联立上面的方程式:
答案为:1010

5.单词分段

问题描述
  小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。
  给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。
  元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。
输入格式
  输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式
  输出答案,或者为yes,或者为no。
样例输入
lanqiao
样例输出
yes
样例输入
world
样例输出
no
评测用例规模与约定
  对于所有评测用例,单词中的字母个数不超过100。
代码实现

def check(index):#这个函数是用来检验有多少次间断的数字
    old = index[0]-1
    count = 0
    for i in index:
        new = i
        if new != old +1:#如果间断,计数加一
            count += 1
        old = new
    return count
word = list(input())
index = []
for i in range(len(word)):#生成字母aeiou的索引序列
    if word[i] in ['a', 'e', 'i', 'o', 'u']:
        index.append(i)
count = check(index)
if count == 1 and index[-1] == len(word)-1 and index[0] !=0 :#如果间断一次并且最后一个字母为aeiou则为正确
    print('yes')
else:
    print('no')

6 .数位递增

问题描述
  一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如1135是一个数位递增的数,而1024不是一个数位递增的数。
  给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?
输入格式
  输入的第一行包含一个整数 n。
输出格式
  输出一行包含一个整数,表示答案。
样例输入
30
样例输出
26
评测用例规模与约定
  对于 40% 的评测用例,1 <= n <= 1000。
  对于 80% 的评测用例,1 <= n <= 100000。
  对于所有评测用例,1 <= n <= 1000000。
代码实现
因为是递增的,而且是比较一个数字,所以我就直接把数字变成单个的字符串列表,然后排序看和原来的列表是否一样,一样的话就说明这个数字是递增的。

def check(n):
    ls = n.copy()#注意要用copy()函数来进行拷贝
    ls.sort()
    return ls == n       
n = input()
count = 0
for i in range(1,eval(n)+1):
    if check(list(str(i))):
        count += 1
print(count)

7.递增三元组

问题描述
  在数列 a[1], a[2], …, a[n] 中,如果对于下标 i, j, k 满足 0   给定一个数列,请问数列中有多少个元素可能是递增三元组的中心。
输入格式
  输入的第一行包含一个整数 n。
  第二行包含 n 个整数 a[1], a[2], …, a[n],相邻的整数间用空格分隔,表示给定的数列。
输出格式
  输出一行包含一个整数,表示答案。
样例输入
5
1 2 5 3 5
样例输出
2
样例说明
  a[2] 和 a[4] 可能是三元组的中心。
评测用例规模与约定
  对于 50% 的评测用例,2 <= n <= 100,0 <= 数列中的数 <= 1000。
  对于所有评测用例,2 <= n <= 1000,0 <= 数列中的数 <= 10000。
代码实现
暴力解决

n = eval(input())
ls = input().split()
ls = [eval(i) for i in ls]
out = []
count = 0
for i in range(n-2):
    for j in range(i+1,n-1):
        for k in range(j+1,n):
            if ls[i]<ls[j] and ls[j]<ls[k]:
                count += 1
                out.append(j)
                break
print(len(set(out)))

你可能感兴趣的:(蓝桥杯Python)