蓝桥杯思维训练营(二)

发布于:2025-02-10 ⋅ 阅读:(29) ⋅ 点赞:(0)

在这里插入图片描述

牛客小白月赛108

小S按按钮
小R排数字

题目总览

题目详解

小S按按钮

在这里插入图片描述
在这里插入图片描述

思路分析:正常处理即可,但是对于x=0的情况要特别处理,是奇数次的时候可以解决

import math
T = int(input())
for _ in range(T):
    x, y = map(int, input().split())
    if y == 0:
        print(0)
        continue
    if x == 0:
        print(2*y-1)
        continue
    bei = (y // (1+x))
    yu = y % (1+x)
    if yu == 0:
        print(2*bei)
    elif yu == 1:
        print(2*bei+1)
    else:
        print(2*bei+2)

或者换成下面的向上取整的思路更好

import math
T = int(input())
for _ in range(T):
    x, y = map(int, input().split())
    if y == 0:
        print(0)
        continue
    bei = math.ceil(y / (1 + x))
    if bei*(1+x) - x >= y:
        print(2*bei-1)
    else:
        print(2*bei)

小R排数字

在这里插入图片描述
在这里插入图片描述

思路分析:对于这题,有一个性质:
为什么能够被2整除的数字,只要个位数能够被2整除就可以? 因为10可以被2整除,所以我们只需考虑个位数即可
同理,被4整除的数字,当只有个位的时候,我们只需判断个位,如果位数在两位以上的话,我们只用判断最低两位即可 100可以被4整除

T = int(input())
# 两位数,能够被4整除的数
ser = []
for i in range(10, 100):
    if i % 4 == 0:
        ser.append(str(i))

for _ in range(T):
    num = list(input())
    # 说明只有一位数
    if len(num) == 1:
        if int(num[0]) % 4 == 0:
            print("YES")
        else:
            print("NO")
        continue
    n = len(num)
    flag = 0
    for i in range(n):
        for j in range(n):
            if i == j:
                continue
            # 字符合并
            s = num[i] + num[j]
            if s in ser:
                print("YES")
                flag = 1
                break
        if flag: break
    if not flag: print("NO")


网站公告

今日签到

点亮在社区的每一天
去签到