第十一届蓝桥杯python组赛后回忆

感觉难度参差不齐吧。可能也是我能力不够。。。。。

  1. 贴门牌号

    找1,2020之间的数中包含2的数的个数

    # 找1,2020之间的数中包含2的数的个数
    ans = 0
    for i in range(1, 2021):
        while i != 0:
            a = i % 10
            if a == 2:
                ans += 1
                break
            i = i // 10
    print(ans)  # 563
    
  2. 2020

    给了一个300行300列的0和2数据,横着竖着斜着找有多少个2020

    我用with open 读取数据

    横着的好找,用line.count(‘2020’) 即可

    竖着的:把矩阵转置后再count()

    斜着的:当时最后又做的这个题,斜着的应该没找全,就提交了。。。。

  3. 跑步

    说小蓝从2000年几月几号跑的那天是星期几(记不清了),包含这天,一直跑到2020年10月1号(也包含这天)。其中每个月的1号跑2000米,逢周一也跑2000米,赶巧是1号也是周一也是跑2000米,其余的日子跑1000米,问一共跑了多少千米。

    import datetime
    
    dt = datetime.date(2000, 6, 3)  # 2000-06-03周六,就从这天开始吧
    dt2 = datetime.date(2020, 10, 1)
    delta = dt2 - dt  # 中间有多少天
    delta1 = datetime.timedelta(1)
    dist = 0
    ans = 6
    
    for i in range(delta.days):
        dt += delta1
        ans += 1
        if dt.day == 1 or ans % 7 == 1:
            dist += 2
            ans = 1
        else:
            dist += 1
    
    print(dist)  # 8630
    
  4. 排序

    找出冒牌排序交换次数为100的字符串序列,最短,只有小写字母,不重复

    我是把他逆序,因为最小的放在最后边他移动的次数最多,这样保证字符串最短,最后到了o,但是o不在最后,在倒数几个位置

  5. 蛇皮走位

    这样的矩阵

    1	2	6	7	15...
    3	5	8	14...
    4	9	13...
    10	12...
    11...
    ...
    

    求第20行20列的数是几

    我是直接用笔算的当时,累计为n(n+1)/2个数,然后往下排

  6. 成绩合格率优秀率

    至少60 为及格
    至少85为优秀
    算及格率和优秀率
    输入第一行为n,代表几个人的乘积,下边n行,为每个人的乘积,保证输入的都是整数>=0
    输出两行 分别为及格率和优秀率,四舍五入
    例如:
    7
    60
    71
    100
    88
    98
    0
    67

    输出

    86%
    43%

    n = int(input())
    jige = good = 0
    for i in range(n):
        s = int(input())
        if 60 <= s < 85:
            jige += 1
        elif s >= 85:
            good += 1
    
    r1 = round((jige+good)/n, 2)
    r2 = round(good/n, 2)
    
    print(int(r1*100), '%', sep='')
    print(int(r2*100), '%', sep='')
    
  7. 平面切分

    直线由y = Ax + B 确定
    输入不同的A B
    然后判断这些线把平面分成了几部分
    样例
    3
    1 1
    2 2
    3 3
    输出
    6

    class Straight:
        def __init__(self, a, b):
            self.a = a
            self.b = b
    
    def relation(n):
        flag = True
        for i in range(n):
            for j in range(i+1, n):
                if line[i].a != line[j].a:
                    flag = False
                    # 不平行,求交点
                    x = -(line[i].b - line[j].b) / (line[i].a - line[j].a)
                    y = line[i].a * x + line[i].b
                    point.add((x, y))
                    break
        if flag:
            # 所有的线都平行
            return n + 1
        else:
            if len(point) == 1:
                # 所有的线相较于1个点
                return 2 * n
            else:
                # 超过2个交点
                return 2 * n + 1
    
    n = int(input())
    line = []
    point = set()
    
    for i in range(n):
        a, b = list(map(int, input().split()))
        line.append(Straight(a, b))
    
    print(relation(n))
    
  8. 最大成绩

    类似于这个

            3
          4   5
        6   7   8
        ...
    

    然后从上边走到底层,只有向左下或右下,且最多相差1,最后累计路线上的值,求最大的。

  9. 忘了

  10. 武器强化

    不会,题都每读完,太长了

猜你喜欢

转载自blog.csdn.net/qq_31910669/article/details/109136837
今日推荐