目录
21. 猴子吃桃问题
题目:猴子吃桃问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
# coding: UTF-8
def func1():
day = 10
a = 1
while day > 1:
a = 2*(a + 1)
day -= 1
print a
def func2():
x2 = 1
for day in range(9,0,-1):
x1 = (x2+1) * 2
x2 = x1
print x1
func1()
func2()
22. 比赛抽签选对手
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。
有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
# coding: UTF-8
# method1:
a = []
b = []
for i in [1, 2, 3]:
for j in [1, 2, 3]:
for k in [1, 2, 3]:
if i <> j and j <>k and i<>k:
if i<>1 and k != 1 and k<>3:
a.append(i)
a.append(j)
a.append(k)
print a
for p in a:
b.append(chr(ord('w')+p))
print b
print 'a vs %s, b vs %s, c vs %s' %(b[0], b[1], b[2])
print "########################################"
#method2:
for i in range(ord('x'), ord('z') + 1):
for j in range(ord('x'), ord('z') + 1):
if i <> ord('x'):
for k in range(ord('x'), ord('z') + 1):
if k<>ord('x') and k<>ord('z') and i <> j and j<>k and i<>k:
print 'a vs %s, b vs %s, c vs %s' %(chr(i), chr(j), chr(k))
23. 打印图案
题目:打印出如下图案(菱形):
*
***
*****
*******
*****
***
*
# coding: UTF-8
from sys import stdout
# method1
for i in range(1, 5):
j = 4-i
print ' '*j, '*'*(2*i-1), ' '*j
'''
for x in range(j):
stdout.write(' ')
for x in range(2*i - 1):
stdout.write('*')
print
'''
for a in range(3,0,-1):
j = 4-a
print ' '*j, '*'*(2*a-1), ' '*j
print "##################"
# method2:
# from sys import stdout
for i in range(4):
for j in range(2-i+1):
stdout.write(' ')
for k in range(2*i + 1):
stdout.write('*')
print
for i in range(3):
for j in range(i+1):
stdout.write(' ')
for k in range(4- 2*i + 1):
stdout.write('*')
print
24. 求数列和
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
# coding: UTF-8
#method1
a = [2]
b = [1]
for i in range(1,20):
a.append(a[-1] + b[-1])
b.append(a[i-1])
print a
print b
sum20 = 0.0
for i in range(20):
sum20 += a[i]*1.0/b[i]
print sum20
print "#########################"
# method2 优化方法1的空间
a = [1, 2]
for i in range(2, 21):
a.append(a[-1]+a[-2])
print a
sum20 = 0.0
for i in range(20):
sum20 += a[i+1]*1.0/a[i]
print sum20
print "######################"
# method3
sum20 = 0.0
a = 2.0
b = 1.0
for i in range(2, 22):
sum20 += a/b
a, b = a+b, a
print a, b, sum20
25. 求阶乘的和
题目:求1+2!+3!+...+20!的和。
# coding: UTF-8
def jiech(n):
if n==1:
return 1
num = 1
for i in range(1, n+1):
num *= i
return num
def main():
sum_jiech = 0
for i in range(1, 21):
sum_jiech += jiech(i)
print sum_jiech
main()
26. 利用递归方法求阶乘
题目:利用递归方法求5!。
# coding: UTF-8
def func(n):
if n == 1 or n==0:
return 1
return n*func(n-1)
print func(5)
27. 反向输出字符串
题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
# coding: UTF-8
def func(st):
if len(st) == 1:
return st
print st[-1], st[0:-1]
return st[-1] + func(st[0:-1])
str_input = raw_input("pls input a line: ")
print str_input
str_test = func(str_input)
print str_test
28. 求年龄
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。
问第4个人岁数,他说比第3个人大2岁。
问第三个人,又说比第2人大两岁。
问第2个人,说比第一个人大两岁。
最后问第一个人,他说是10岁。请问第五个人多大?
# coding: UTF-8
#method1
a = 10
for i in range(4):
a += 2
print a
#method2
def age(n):
if n == 1:
c = 10
else:
c = age(n-1) + 2
return c
print age(5)
29. 逆序输出数字
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
# coding: UTF-8
num = input("pls input a interger: ")
count = 1
while num/10 >0:
print num % 10
num = num/10
count += 1
print num
print "该数是%d位数"%count
30. 判断回文数
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
# coding: UTF-8
# method 1
num = input("plz input a 五位数: ")
ten_th = num/10000
th = num%10000/1000
ten = num%100/10
inter = num%10
if ten_th == inter and th == ten:
print 'yes'
else:
print 'no'
# method 2
l = raw_input("plz input a num:")
flag = 1
for i in range(len(l)/2):
if l[i] <> l[len(l)-1-i]:
flag = 0
break
if flag == 1: print 'yes'
else: print 'no'