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

学习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,直接看这个数字很难直观准确的读出来,为了准确快速的读出一个数字,想请你编写一个读数系统。

在这里插入图片描述

中文读数规则:

  1. 从高位毒气,先读亿级,再读万级,最后读个级;
  2. 读亿级和万级时按读个级的方法来读,读完亿级后加上一个“亿”字,读完万级后加上一个“万”字;
  3. 每级末尾不管有几个0都不读,每级中间和前面有一个或连续几个0,都只读一个0。

输入一个小于一百亿的正整数( 1 ≤ n < 10000000000 1\le n\lt 10000000000 1n<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 1n<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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值