学习Python从娃娃抓起!记录下蓝桥杯备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:历年蓝桥杯Python青少组中/高级国赛省赛真题解析 | 汇总
第6题
【题目描述】
提示信息:
阶乘定义:一个正整数的阶乘是所有小于及等于该数的正整数的乘积。
例如:3的阶乘6(也就是1 * 2 * 3 = 6的结果)
例如:8的阶乘40320(也就是 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8的结果)
输入一个正整数N,输出N的阶乘。
【输入】
输入一个正整数N
【输出】
输出N的阶乘
【输入样例】
3
【输出样例】
6
【代码详解】
n = int(input())
mul = 1
for i in range(1, n+1):
mul *= i
print(mul)
【运行结果】
3
6
第7题
【题目描述】
输入一个全部由小写字母组成的字符串(如:abcd),然后将字符串奇数位的小写字母转为大写字母,将偶数位的小写字母转为对应的ASCII码。最后将转化后的结果输出。
【输入】
输入一个全部由小写字母组成的字符串(如:abcd)
【输出】
输出转化后的结果
【输入样例】
abcd
【输出样例】
A98C100
【代码详解】
s = input()
ans = ""
for i in range(1, len(s)+1):
if i%2==1:
ans += s[i-1].upper()
else:
ans += str(ord(s[i-1]))
print(ans)
【运行结果】
abcd
A98C100
第8题
【题目描述】
输入两个不相等的四位正整数N和M,其中N<M,并以逗号分隔,输出N与M之间(包含N和M)所有满足要求的正整数切正整数之间以一个英文逗号隔开。
要求每个正整数的各个位上的数都为偶数(主:0为偶数)
【输入】
两个不相等的四位正整数(N,M)
【输出】
N与M之间(包含N和M)所有满足要求的正整数且正整数之间以一个英文逗号隔开
【输入样例】
4000,4008
【输出样例】
4000,4002,4004,4006,4008
【代码详解】
n, m = [int(i) for i in input().split(',')]
def check(x):
while x>0:
tmp = x%10
if tmp%2==1:
return False
x //= 10
return True
ls = []
for i in range(n, m+1):
if check(i):
ls.append(str(i))
print(','.join(ls))
【运行结果】
4000,4008
4000,4002,4004,4006,4008
第9题
【题目描述】
输入一个正整数n,统计从1到n之间(包含1和n)所有正整数中,0,1,2,3,4,5,6,7,8,9的数字分别出现的次数,且分行输出。
例如:n为12,那么1到n之间所有的正整数有1,2,3,4,5,6,7,8,9,10,11,12。
在12个正整数中数字0出现了1次,数字1出现了5次,数字2出现了2次,数字2,3,4,5,6,7,8,9分别出现了1次。
【输入】
一个正整数n
【输出】
0,0出现的次数
1,1出现的次数
2,2出现的次数
…
9,9出现的次数
【输入样例】
10
【输出样例】
0,1
1,2
2,1
3,1
4,1
5,1
6,1
7,1
8,1
9,1
【代码详解】
n = int(input())
ls = [0 for i in range(15)]
def f(x):
while x>0:
tmp = x % 10
ls[tmp]+=1
x //= 10
for i in range(1, n+1):
f(i)
for i in range(10):
print(i,ls[i], sep=',')
【运行结果】
10
0,1
1,2
2,1
3,1
4,1
5,1
6,1
7,1
8,1
9,1
第10题
【题目描述】
输入一个正整数n,将1到n之间所有正整数(包含1和n)作为python字典的键,将正整数的平方作为对应键的值,组成n个键值对。输出1到n的所有键值对
(格式要求:每个键值对之间以英文逗号隔开,输出的内容前后中间不能有空格及大括号)。
【输入】
输入一个正整数n
【输出】
输出1到n的所有键值对(按照编程实现要求输出)
【输入样例】
5
【输出样例】
1:1,2:4,3:9,4:16,5:25
【代码详解】
n = int(input())
dict = {}
for i in range(1, n+1):
dict[i] = i*i
ans = ""
for key,value in dict.items():
ans += str(key)+":"+str(value)+","
print(ans[:-1])
【运行结果】
5
1:1,2:4,3:9,4:16,5:25
第11题
【题目描述】
假设给出一个数值9876543201,直接看这个数字很难直观准确的读出来,为了准确快速的读出一个数字,想请你编写一个读数系统。
中文读数规则:
- 从高位毒气,先读亿级,再读万级,最后读个级;
- 读亿级和万级时按读个级的方法来读,读完亿级后加上一个“亿”字,读完万级后加上一个“万”字;
- 每级末尾不管有几个0都不读,每级中间和前面有一个或连续几个0,都只读一个0。
输入一个小于一百亿的正整数( 1 ≤ n < 10000000000 1\le n\lt 10000000000 1≤n<10000000000),按照中文读写的规范转为汉语拼音字串,相邻的两个音节用一个空格符隔开。
例如:给定一个阿拉伯数字串“9876543201”
中文读写的规范:九十八亿七千六百五十四万三千二百零一
汉语拼音字串:jiu shi ba yi qi qian liu bai wu shi si wan san qian er bai ling yi
【输入】
输入一个小于一百亿的正整数( 1 ≤ n < 10000000000 1\le n\lt 10000000000 1≤n<10000000000)
【输出】
输出其对应汉语拼音字串,相邻的两个音节用一个空格符隔开
【输入样例】
54321001
【输出样例】
wu qian si bai san shi er wan yi qian ling yi
【代码详解】
a = input()
weishu = []
b = []
dushubiao = {0: "qian ", 1: "bai ", 2: "shi ", 3: ""}
its = {1: "yi ", 2: "er ", 3: "san ", 4: "si ", 5: "wu ", 6: "liu ", 7: "qi ", 8: "ba ", 9: "jiu "}
suf = {0: "", 1: "wan ", 2: "yi "}
def dushu(array):
st = ""
x = 0
if len(array) < 4:
x = 4 - len(array)
zero = 0
for i in array:
if i == 0:
zero += 1
else:
if zero:
zero = 0
st = st + "ling "
st = st + its[i] + dushubiao[x]
x += 1
return st
for i in reversed(a):
b = [int(i)] + b
if len(b) >= 4:
weishu = [b] + weishu
b = []
if b:
weishu = [b] + weishu
du = ""
x = 0
for i in reversed(weishu):
d=dushu(i)
if d:
s=suf[x]
else:
s=""
du = d+ s + du
x += 1
dua=du.split()
if dua[0]=="yi" and dua[1]=="shi":
du=" ".join(dua[1:])
print(du)
【运行结果】
54321001
wu qian si bai san shi er wan yi qian ling yi
第12题
【题目描述】
提示信息:
回形取数,是沿着一个数字矩阵的左上角向下开始移动取数,当前方没有数字或者数字已经被取过,就会左转继续移动取数,当没有数可以取时回形取数结果。如下图所示:
回形取数结束后产生一条线路图,也就是数字线路,上图的数字线路为:1,5,9,13,14,15,16,12,8,4,3,2,6,10,11,7
用户分别输入两个正整数,第一个数代表数字矩阵的行数,第二个数代表数字矩阵的列数,数字矩阵的数字为从1开始的正整数。根据回形取数规则将最终的数字线路输出(数字线路中的每个数字之间需要有一个英文逗号隔开)。
例如:
输入的是2和3数字矩阵为:
1 2 3
4 5 6
数字线路为:1,4,5,6,3,2
输入的是4和3数字矩阵为:
1 2 3
4 5 6
7 8 9
10 11 12
数字线路为:1,4,7,10,11,12,9,6,3,2,5,8
【输入】
第一行输入一个正整数作为行数
第二行输入一个正整数作为列数
【输出】
根据回形取数规则将数字线路输出(数字线路中的每个数字之间需要有一个英文逗号隔开)
【输入样例】
3
2
【输出样例】
1,3,5,6,4,2
【代码详解】
n = int(input())
m = int(input())
a = [[0 for i in range(10)] for i in range(10)]
tmp = 1
for i in range(1, n+1):
for j in range(1, m+1):
a[i][j] = tmp
tmp+=1
ls = []
x = 1
y = 1
mark = 1
ls.append(str(a[1][1]))
while mark < n*m:
while x+1<=n and a[x+1][y]: # 向下
a[x][y] = 0
x += 1
mark+=1
ls.append(str(a[x][y]))
while y+1<=m and a[x][y+1]: # 向右
a[x][y] = 0
y += 1
mark += 1
ls.append(str(a[x][y]))
while x-1>=1 and a[x-1][y]: # 向上
a[x][y] = 0
x -= 1
mark += 1
ls.append(str(a[x][y]))
while y-1>=1 and a[x][y-1]: # 向左
a[x][y] = 0
y -= 1
mark += 1
ls.append(str(a[x][y]))
print(','.join(ls))
【运行结果】
3
2
1,3,5,6,4,2