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


代码:

· 

· 

· 

· 

· 

· 

· 

· 

· 

M = int(input())N = int(input())if M > N:    M, N =N, Mlst = []for n in range(M,N+1):    if n % 7 == 0 and n % 5 != 0:        lst.append(str(n))print(",".join(lst))

 


代码:

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

s = input()count = [0]*4for c in s:    if c == ' ':        count[1] +=1        continue    b = ord(c)    if ord('A')<=b<=ord('Z')  \       or ord('a')<=b<=ord('z'):       count[0] +=1    elif ord('1')<=b<=ord('9'):        count[2] +=1    else:        count[3] +=1for i in count:    print(i)

 


分析:这是约瑟夫环问题,只要在每个元素中记录它开始的位置,把剩下来的元素中记录的位置输出就行。为了简化计算,采用标注形式(把位置值置0)。
代码:

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

n = int(input())lst = list(range(1,n+1))  #构建编号列表count = 0  #出列人员数num = 0 #计数累计p = 0 #位置while count < n -1:  #未出列人数超过1人    p %= n           #规范列表下标在列表范围内    if lst[p] > 0:  #该位置未出列        num += 1    #计数加1         if num == 3:  #计数到达3个            lst[p] = 0 #该位置出列            count += 1  #出列人数加1            num = 0     #出列计数复位    p += 1  #列表下标前推1位for i in lst:  #打印未出列原位置    if i > 0:        print(i)

解说:用列表形式循环计数代码:

· 

· 

· 

· 

while 结束条件:    p %= n           #规范列表下标在列表范围内    #每个元素的处理方法    p += 1  #列表下标前推1

当检测到元素未出列,那么计数加1:

· 

· 

    if lst[p] > 0:  #该位置未出列        num += 1    #计数加1

当检测到计数等于3时:

· 

· 

· 

· 

        if num == 3:  #计数到达3个            lst[p] = 0 #该位置出列            count += 1  #出列人数加1            num = 0     #出列计数复位

 


分析:由于没有0层,为了简化计算,把大于0的楼层减1作为计算的楼层。电梯升降的层数符合植树算法的只含一端,即楼层相减,结果大于0是上升,小于0是下降。
代码:

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

#楼层输入转换def change(sn):    nm = int(sn)    if nm > 0:  #如果楼层大于0,减1        nm -= 1    return nmlst = list(map(change, input().split(',')))c = 0  #消耗电量for i in range(len(lst)-1):    d = lst[i+1] - lst[i]    if d > 0:        c += d * 1    else:        c -= d * 0.3print(c)