Python蓝桥31天,第五天

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出来,放上代码请看官自己体会一下

代码

直接找题解Python第一个就是

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)
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值