蓝桥杯思维训练营(二)
文章目录
- 题目总览
- 题目详解
- 小S按按钮
- 小R排数字
牛客小白月赛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")