历年蓝桥杯Python青少组中/高级国赛省赛真题解析 | 2020年12月(省赛)编程题(6-11)

学习Python从娃娃抓起!记录下蓝桥杯备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:历年蓝桥杯Python青少组中/高级国赛省赛真题解析 | 汇总


第6题

【题目描述】

输入一个正整数(个位不能为0),然后将这个正整数逆序输出。

【输入】

一个正整数

【输出】

逆序输出这个正整数

【输入样例】

123

【输出样例】

321

【代码详解】

n = input()
print(n[::-1])

【运行结果】

123
321

第7题

【题目描述】

提示信息:

小蓝需要打印一份资料,为了环保采用双面打印,也就是一张纸的正反面都打印出相应的内容。举个例子来说:如果一份资料有3页,那么需要2张纸进行打印;如果一份资料有4页,那么还是需要2张纸进行打印。现在已经知道了一份资料的总页数,你帮小蓝计算一下所需要纸张的数量。

输入一个正整数作为这份资料的总页数,输出双面打印这份资料所需要纸张的数量。

【输入】

一个正整数

【输出】

双面打印这份资料所需要纸张的数量

【输入样例】

3

【输出样例】

2

【代码详解】

n = int(input())
if n%2==0:
    print(n//2)
else:
    print(n//2+1)

【运行结果】

4
2

第8题

【题目描述】

提示信息:

给定一个字符串(只包含小写字母),按照从第start位开始每间隔step位的规则,对字符串对应位置上的字符进行输出。

例如:字符串为abcdefg,start为2,step为2,就是从字符串abcdefg的第2位字符“b“开始,每次间隔2个字符,输出字符串对应位置上的字符,故输出的结果为b,e。

第一行输入一个字符串(只包含小写字母),第二行输入两个正整数切正整数之间以一个空格隔开,第一个正整数作为开始位置(start),第二个正整数作为间隔的字符数(step)。输出字符串对应位置上的字符,且字符之间以英文逗号隔开。

【输入】

第一行输入一个字符串(只包含小写字母)

第二行输入两个正整数且正整数之间以一个空格隔开

【输出】

输出字符串对应位置上的字符,且字符之间以英文逗号隔开

【输入样例】

abcdefg
2 3

【输出样例】

b,f

【代码详解】

s = input()
s = ' ' + s
ls = []
start, step = [int(i) for i in input().split()]
ls.append(s[start])
while start<=len(s)-1:
    start = start + step + 1
    if start<len(s):
        ls.append(s[start])
print(','.join(ls))

【运行结果】

abcdefg
2 3
b,f

第9题

【题目描述】

输入N个正整数且正整数之间以一个逗号隔开,统计N个正整数中出现过的数字,以及每个数字重复出现的次数,将数字按出现次数由高到低进行排列(相同次数不分先后顺序)并输出,输出的数字之间以英文逗号隔开。

例如:输入的正整数为8,8,7,7,7,6。共出现了3个正整数为8、7、6。其中8出现了2次,7出现了3次,6出现了1次。按照次数由高到低排序后,输出的结果为7,8,6。

【输入】

N个正整数且正整数之间以逗号隔开

【输出】

所有出现过的数字,按照出现次数由高到低排序,数字之间以英文逗号隔开

【输入样例】

8,8,7,7,7,6

【输出样例】

7,8,6

【代码详解】

ls = [int(i) for i in input().split(',')]
se = set(ls)

result1 = []
ls1 = []
for i in se:
    tmp = ls.count(int(i))
    ls1.append([i, tmp])
ls1 = sorted(ls1, key=lambda x:x[1], reverse=True)  # 按照ls1的第2维从大到小排序
ans = ""
for i in range(len(ls1)):
    ans += str(ls1[i][0]) + ','
print(ans[:-1])

【运行结果】

8,8,7,7,7,6
7,8,6

第10题

【题目描述】

输入一个正整数N(10<N<1000),然后将N分解成3个各不相同的正整数,即3个正整数之和为N。且要求每个正整数中都不包含数字2和4。输出一共有多少种不同的分解方法。

例如:输入的正整数N为:12

将12分解为3个不同的正整数,且每个正整数都不包含数字2和4为:1,3,8和1,5,6.

一共有两种分解方法。

注意:数字相同顺序不同的算法一种分解方法。

【输入】

一个正整数N(10<N<1000)

【输出】

一共有多少种不同的分解方法

【输入样例】

12

【输出样例】

2

【代码详解】

n = int(input())
count = 0
def check(x):
    while x != 0:
        t = x % 10
        x = int(x / 10)
        if t == 2 or t == 4:
            return False
    return True

for i in range(1,n):
    if check(i):
        for j in range(i + 1, n):
            if check(j):
                k = n - i - j
                if k > j and check(k):
                    count += 1
                    #print(i, j, k)
print(count)

【运行结果】

12
2

第11题

【题目描述】

提示信息:

从1 到10000的连续正整数,其中有多组连续的正整数之和相同。

例如:2,3,4和4,5这两组连续正整数之和都为9。

输入一个正整数S,输出从1到10000连续的正整数中,有多少组连续正整数之和为S。(一组连续正整数最少为两个正整数)

例如:输入为9,其中2,3,4和4,5这两组连续正整数之和都为9,则输出2。

【输入】

一个正整数S

【输出】

输出有几组连续的正整数之和为S

【输入样例】

9

【输出样例】

2

【代码详解】

class Solution:
    def FindContinuousSequence(self, tsum):
        # write code here
        if tsum < 3:
            return []
        small, big = 1, 2
        results = []
        sum = small + big
        while small < tsum / 2:
            if sum < tsum:
                big += 1
                sum += big
            elif sum > tsum:
                sum -= small
                small += 1
            else:
                results.append(list(range(small, big + 1)))
                sum -= small
                small += 1
        return results
n = int(input())
#print(Solution().FindContinuousSequence(n))
print(len(Solution().FindContinuousSequence(n)))

【运行结果】

9
2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值