首页 > 编程语言 >python最经典基础算法题-10

python最经典基础算法题-10

时间:2024-09-27 09:51:35浏览次数:16  
标签:10 python range 猴子 809 算法 print 桃子 lambda

题目001:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n

【思路】:学了lambda想耍一下,结果发现官网写的比我还简洁!

n =17
fenmu = range(2,n+1,2) if n%2==0 else range(1,n+1,2)
s = sum(map(lambda x:1/x,fenmu))
print(s)
# 官网参考答案
n =17
ls = sum([1/i for i in range(n,0,-2)])
print(ls)
题目002:找到年龄最大的人,并输出。

person = {"li":18,"wang":50,"zhang":20,"sun":22}  
【思路】:官网的答案也基本一样。

person = {"li":18,"wang":50,"zhang":20,"sun":22}
name,age='',0
for p in person.keys():
if person.get(p)>age:
name,age=p,person.get(p)
print(name,age)

题目003:猴子分桃

海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

【思路】:不考虑解方程什么的,问题实际上归结成“整数n,迭代5次之每次都能得到整数,求n的最小值”问题。一开始想简单了,以为最后的猴子只拿一个,代进去一算发现不是整数。于是直接暴力输入,一个个试直到3121,得到整除。当然也可以反着试,假设最后一个猴子拿到n个桃子,remain = lambda t:t/4*5+1,一个个试直到1020,得到整除,也能得出结论,最开始的猴子拿了3121个桃子。

for total in range(10000):
t = total # 沙滩上有t个桃子
remain = lambda t:(t-1)/5*4 # 每次分桃后剩余桃子。
for i in range(5):
t = remain(t)
if t%1!=0:break # 如果不是整数,说明不符合题意
else:
print(total,t) # 5次都能得到整数,第一个猴子3121,五个猴子拿完沙滩剩余1020个。
break

题目004:809*??=800*??+9*?? 其中??代表的两位数,

809*??为四位数,8*??的结果为两位数,9*??的结果为3位数。

求??代表的两位数,及809*??后的结果。

假设??为x,因为8*x<100,所以x<13。

实际上因为9*x>100,得到x>11,很明显x就是12,题意给的过于充分了。

程序如下:

l = lambda x:len(str(x))
for i in range(20):
if l(809*i)==4 and l(8*i)==2 and l(9*i)==3:
x = i
print(x)
print(809*x==800*x+9*x)
print(809*x)
题目005:求0—7所能组成的奇数个数。

【思路】:没说组成几位数或是否重复使用。假设1-8位都可以,且不能重复使用。
直接用排列函数,累加然后去重,就得到答案了。

s = [i for i in '01234567'] import itertools
arr = [] for i in range(1,9):
a = list(itertools.permutations(s,i)) # 长度1-8左右排列
l = list(map(lambda x:int(''.join(x)),a)) # 整理成数字形式(避免出现02这种情况,02实际上就是2)
arr+=l
print(i,len(l))
arr1 = set(arr) # 去重
arr2 = list(filter(lambda x:x%2==1,arr1)) # 只留奇数
print(len(arr),len(arr1),len(arr2)) # 答案是46972
def tm083_1():

标签:10,python,range,猴子,809,算法,print,桃子,lambda
From: https://blog.51cto.com/u_16494136/12126900

相关文章

  • js狠疯狂:10分钟生成项目,前后端一体化高效开发方案
    01疯狂的开始“这不可能吧!”小李盯着屏幕,几乎有些不敢相信自己的耳朵。那是一个平常的周一早晨,项目组在公司会议室开着例行周会。项目经理老张突然提出一个新需求:“能不能在10分钟内生成一个从后端API到PC端、移动端的完整项目?”所有人顿时沉默了几秒钟,随后开发小组爆发出......
  • 《HelloGitHub》第 102 期
    兴趣是最好的老师,HelloGitHub让你对编程感兴趣!简介HelloGitHub分享GitHub上有趣、入门级的开源项目。github.com/521xueweihan/HelloGitHub这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言Python、Java、Go、C/C++、Swift...让你在短......
  • 戴尔笔记本怎么重装系统_戴尔笔记本重装系统win10教程(支持新旧机型安装)
         戴尔笔记本怎么重装系统?戴尔笔记本这几年默认预装win10家庭版和win11家庭版。有的用户用上了预装win11家庭版的戴尔笔记本,使用一段时间依然不习惯,于是想退回win10。但不知道怎么重装win10,这几年的戴尔笔记本建议采用U盘方式安装系统比较保险,在线安装的话可能触发......