学习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