蓝桥杯 python 最大比例(day6)

本文介绍了如何使用Python实现一个贪心算法问题,通过集合去重、列表排序和lambda表达式自定义排序规则,计算列表中相邻元素的分数之比的最大公约数。通过实例演示和解释lambda函数在排序中的用法,强调了通过模仿和练习来理解算法思想的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

代码

import math
n=int(input())
L=set(list(map(int,input().split())))
L=list(L)
L.sort()
bis=[]
for i in range(len(L)-1):
  bis.append([i+1,i,L[i+1]/L[i]])
i1,i2=min(bis,key=lambda x:x[2])[0],min(bis,key=lambda x:x[2])[1]
#排序后,下标为i1的数肯定比i2大,不用去节外生枝判断
print(str(L[i1]//math.gcd(L[i1],L[i2]))+'/'+str(L[i2]//math.gcd(L[i1],L[i2])))

核心思想以及详解

本题核心思想是运用贪心的思想

详解如下:

n=int(input())
L=set(list(map(int,input().split())))
L=list(L)
L.sort()

以上代码时输入,set()函数的作用是创建一个集合,目的是为了去重,sort()函数的作用是让列表里面的元素从小到大排序。

for i in range(len(L)-1):
  bis.append([i+1,i,L[i+1]/L[i]])
print(bis)

这一行代码的运行结果是

i1,i2=min(bis,key=lambda x:x[2])[0],min(bis,key=lambda x:x[2])[1]

这行代码的结果是i1=1,i2=0,是不是很不可思议!

这里会有一个误区,有关lambda函数,我们理解到的一般是说它是匿名函数eg:

a=lambda x:x+2
print(a(2))

输出结果为4

这里并不是这个意思,而是 很多时候需要对二维列表的第一个元素或者是第二个元素按照升序或者降序的规则排序,python提供了lambda表达式方便我们自定义排序的规则。x表示的是变量,也可以写成另外的变量,冒号后面跟着排序的参数,当一个参数的时候表示先对当前的参数进行排序

看代码为大家说明吧

最后一行代码,math.gcd()表示求公约数。想要更好的理解代码思想,我的意见是:多带几个例子,极致模仿,然后反复刻意练习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值