1. 猴子分香蕉
题目描述
解析
16个香蕉的话在第四个的时候正好分完了,一个不留,所以从21开始跨度为五的遍历-暴力
代码
flag = False
for N in range(21,10000,5):
temp = N
for i in range(1,5):
if N % 5 == i:
N = N - N//5 -i
flag = True
else:
flag = False
break
if N % 5 == 0 and flag:
print(temp)
break
2. 等差数列
题目描述
解析
由an = a1 - (n-1) d 直接能得到n = ((an - a1)//d) + 1
也就是求d为是我们的目的
d就是各个差值的最大公因数
代码
import math
N = int(input())
lis = sorted(map(int,input().split()))
d = lis[1] - lis[0]
if d == 0:
print(len(lis))
else:
for i in range(2,len(lis)):
d = math.gcd(d,lis[i] - lis[i-1])
print(((lis[-1] - lis[0])//d) + 1)
3. 平方序列
题目描述
解析
很明显,暴力的话就两个for循环,但是肯定是陷阱
所以我们减一个for循环,换成值的比较
代码
import math
for x in range(2020,100000):
y = math.sqrt(2*x**2 - 2019*2019)
if y//1 == y:
print(int(x+y))
break
# 暴力
# def f():
# for X in range(2020,1000000):
# for Y in range(X+1,100000):
# if Y*Y - X*X == X*X - 2019*2019:
# print(X+Y)
# return
# f()
5. 倍数问题
题目描述
解析
很难受,我只得了20分
但确实有大佬能a出来,放上代码请看官自己体会一下
代码
n, k = map(int,input().split())
r = [[0] * 3 for i in range(k)] #记录余数,每个余数记录最大的三个数a、b、c
a = input().split()
# 输入数据就分组 同余一组 维持每组最大的三个数 用插入排序
for i in range(len(a)):
re = int(a[i]) % k
if int(a[i]) > r[re][0]:
r[re][2], r[re][1], r[re][0] = r[re][1], r[re][0], eval(a[i])
elif int(a[i]) > r[re][1]:
r[re][2], r[re][1] = r[re][1], eval(a[i])
elif int(a[i]) > r[re][2]:
r[re][2] = eval(a[i])
Max = 0
# 按照余数枚举
for i in range(k):
for j in range(i, k):
tmp = (k - i + k - j) % k
v1 = r[i][0] #a的余数
if i == j:
v2 = r[i][1] #如果b的余数和a的余数相同
if i == tmp: #如果c的余数和a也相同
v3 = r[i][2]
else:
v3 = r[tmp][0]
else: #如果b的余数和a的余数不同
v2 = r[j][0]
if i == tmp: v3 = r[i][1]
elif j == tmp: v3 = r[j][1]
else: v3 = r[tmp][0]
if v1 + v2 + v3 > Max:
Max = v1 + v2 + v3
print(Max)