蓝桥杯青少组STEMA测评(2020年)Python中级组编程题解



代码:

· 

· 

N = input()print(len(N))

 


代码:

· 

· 

M = int(input())print(M % 2)

 


代码:

· 

· 

· 

lst = list(map(int, input().split(",")))c = (sum(lst)-max(lst)-min(lst))/(len(lst)-2)print("%.2f" % c)

 


 

分析:由于是奇数,所以个位先选,到百位(不能为0),然后到十位。

代码:

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

N = int(input())lst = list(range(N+1))  #构造数字列表count = 0  #统计数for i in lst[1::2]:  #个位    nlst=lst.copy()  #先浅拷贝    nlst.remove(i)   #再移出该元素    for j in nlst[1:]:  #百位,与个位相似        nlst2=nlst.copy()          nlst2.remove(j)        count += len(nlst2)  #剩下的都是十位print(count)

 


分析:如果M为奇数,那么中间一位是独立的,即实际是(M+1)//2位排列,首位不为0;如果M为偶数,则是M//2位排列,首位不为0。排列的元素是0到9个数字。
代码:

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

M = int(input())if M % 2 == 0:    N = M // 2   #实际排列位数    type=Trueelse:    N = (M+1)//2    type=Falsecount = 0  #统计数count99 = 0  #99统计数#递归统计出首位外其它位def other(n, sn):    global count,count99    if n == 1:  #如果是最后要选的一位        count += 10        for i in range(10):            if i == 9 and type:  #偶数,中间两个是99.                count99 += 1                continue            nsn = sn + str(i)  #构建元素            if "99" in nsn:  #检查99                count99 += 1        return    for i in range(n):        for j in range(10):            nsn = sn + str(j)              other(n-1,nsn)  #递归选择下一位for i in range(1,10):  #最高位不可以为0    s = str(i)    other(N-1, s)print(count)print(count99)