【摘要】 题目021:猴子吃桃问题
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
”’
def tm021():
”’
第十天num=1个,第九天必然是4个:4/2-1=1,也就是…
题目021:猴子吃桃问题
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
”’
def tm021():
”’
第十天num=1个,第九天必然是4个:4/2-1=1,也就是(num+1)*2=4。
做这种题,先用算数式列出来,然后用代码描述就行了。
”’
num = 1
for i in range(10-1):
num = (num+1)*2
print(num)
”’
题目022:两个乒乓球队进行比赛,各出三人。
甲队为a,b,c三人,乙队为x,y,z三人。
已抽签决定比赛名单。有人向队员打听比赛的名单。
a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
”’
def tm022():
”’
【个人备注】:关键是将抽象化,将问题抽象成代码方式。
我的解题思路,是用排列组合函数,列出方案,然后排除。
而官方解答里面有一个纯粹的for循环加if的求解方式,
更抽象一些,用了一个很常用固定范式,直接拿来解题了。
稍微对其抽象的方法注释了一下。
”’
import itertools
jia = [‘a’,’b’,’c’]
yi = [‘x’,’y’,’z’]
arr = list(itertools.permutations(yi,3)) # 面对甲队a,b,c时,乙队所有排列 [(‘x’, ‘y’, ‘z’), (‘x’, ‘z’, ‘y’), (‘y’, ‘x’, ‘z’), (‘y’, ‘z’, ‘x’), (‘z’, ‘x’, ‘y’), (‘z’, ‘y’, ‘x’)]
arr = [[jia[i]+a[i] for i in range(3)] for a in arr] #将a,b,c写上,得到所有对阵组合 [[‘ax’, ‘by’, ‘cz’], [‘ax’, ‘bz’, ‘cy’], [‘ay’, ‘bx’, ‘cz’], [‘ay’, ‘bz’, ‘cx’], [‘az’, ‘bx’, ‘cy’], [‘az’, ‘by’, ‘cx’]]
for i in arr:
if ‘ax’ in i:
pass
elif ‘cx’ in i or ‘cz’ in i:
pass
else:
print(i) # 得到 [‘az’, ‘bx’, ‘cy’]
def tm022_1():
for a in [‘x’,’y’,’z’]: # a在x,y,z中挑一个打
for b in [‘x’, ‘y’, ‘z’]: # b在x,y,z中挑一个打
for c in [‘x’, ‘y’, ‘z’]: # c在x,y,z中挑一个打 三层总计27种打法
if a!=b and b!=c and c!=a: # a,b,c不能挑同一个人 缩减到6种打法
if a!=’x’ and c!=’x’ and c!=’z’: # 依据题意不能ax,cx,cz 缩减到1种打法
print(‘a’+a,’b’+b,’c’+c)
”’
题目023:
打印出如下图案(菱形):
*
***
*****
*******
*****
***
*
”’
def tm023():
”’
【个人备注】:想到了绝对值,
然后将[0,1,2,3,4,5,6]变成了[3,2,1,0,1,2,3],也就是每行左边空格数。
”’
num = 7
for i in range(num):
blank = abs(num//2-i)
print(‘ ‘*blank+’*’*(num-2*blank)+’ ‘*blank)
”’
题目024:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
”’
def tm024():
# 没啥好说的
a,b,num = 2,1,0
for i in range(20):
num+=a/b
a=a+b
b=a-b
print(num)
”’
题目025:求1+2!+3!+…+20!的和。
”’
def tm025():
”’
【个人备注】:实现起来很简单。
下面官方的代码,比我写的更简洁。
”’
s,t=0,1
for n in range(1,21):
t*=n
s+=t
print(s)
”’
题目026:利用递归方法求5!。
”’
def fac(x):
if x>1:
return x*fac(x-1)
else:
return x
def tm026():
”’
【个人备注】:按题目要求,公式f(n)=n*f(n-1),递归调用求解。
”’
print(fac(5))
”’
题目027:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
”’
def output(s,l):
if l==0:
return
print (s[l-1])
output(s,l-1)
def tm027():
”’
【个人备注】:直接从官网复制,不喜欢递归。
”’
s = input(‘Input a string:’)
l = len(s)
output(s,l)
”’
题目028:有5个人坐在一起,
问第五个人多少岁?他说比第4个人大两岁。
问第4个人,他说比第3个人大两岁。
问第3个人,又说比第2个人大两岁。
问第2个人,说比第1个人大两岁。
最后问第一个人,他说是10岁。
请问第五个人多大?
”’
def age(x):
if x>1:
return 2+age(x-1)
else:
return 10
def tm028():
”’
【个人备注】:官网给的还是递归方法,因为不用递归的话就是个口算题。
”’
print(age(5))
”’
题目029:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
”’
def tm029():
”’
【个人备注】:用Python,So Easy~
list倒序可以用list.reverse();
字符串就只能用步长=-1的方式来倒序了。
”’
num = 12345
s = str(num)
print(len(s))
print(s[::-1])
”’
题目030:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
”’
def tm030():
”’
【个人备注】:没啥可说的。
”’
num = 12321
s = str(num)
for i in range(len(s)//2):
if s[i]!=s[-i-1]:
print(False)
break
else:
print(True)
文章来源: fantianzuo.blog.csdn.net,作者:兔兔RabbitMQ!!!,版权归原作者所有,如需转载,请联系作者。
原文链接:fantianzuo.blog.csdn.net/article/details/81749570