第一关
def power(a, n):
#********** Begin **********#
if n==0:
return 1
elif n==1:
return a
else:
return a*power(a,n-1)
#********** End **********#
#第二题
def fib(n):
#********** Begin **********#
if n==0 or n==1:
return 1
else:
return fib(n-1)+fib(n-2)
#********** End **********#
#第三题
def gcd(m, n):
#********** Begin **********#
if n==0:
return m
else:
return gcd(n, m%n)
#********** End **********#
#第四题
def f(n):
#********** Begin **********#
if n==0:
return 1
else:
return 1+1/f(n-1)
#********** End **********#
for n in range(10):
print(f(n))
print('*'*20)
#第五题
def fib2(n):
#********** Begin **********#
if n == 0:
return 0
elif n==1:
return 1
elif n%2==0:
n=n/2
return (2*fib2(n-1)+fib2(n))*fib2(n)
elif n%2==1:
n=(n+1)/2
return fib2(n-1)**2+fib2(n)**2
第二关
def isPal(s):
# 请在下面编写代码
flag=True
s1=s[::-1]#倒序
if s1!=s:
flag=False
return flag
# 请不要修改下面的代码
#第二题
def koch(n):
# 请在下面编写代码
s='F'
if n==0:
return s
else:
return koch(n-1)+"L"+koch(n-1)+"R"+koch(n-1)+"L"+koch(n-1)
#请不要修改下面的代码
#第三题
def vowel(s):
#请在下面编写代码
l=["a","e","i","o","u","A","E","I","O","U"]#大小写都要
i=0
for j in s :
if j in l:
i+=1
return i
#请不要修改下面的代码
#第四题
def squareSum(n):
#请在下面编写代码
#********** Begin **********#
if n==0:
return 0
else:
return n**2+squareSum(n-1)
#********** End **********#
#请不要修改下面的代码
#第五题
def vonNeumann(n):
# 请在下面编写代码
#********** Begin **********#
if n==0:
return "{}"
elif n==1:
return "{"+vonNeumann(n-1)+"}"
else:
s=""
for i in range(n-1):
s=s+vonNeumann(i)+","+" "#注意空格
return "{"+s+vonNeumann(n-1)+"}"
#最后面是没有空格和逗号的,所以这里单独把n-1拿出来考虑
#********** End **********#
#请不要修改下面的代码
#第六题
def perm(s):
# 请在下面编写代码
#********** Begin **********#
if len(s)<=1:
return [s]
sl=[]
for i in range(len(s)):
for j in perm(s[0:i]+s[i+1:]):
sl.append(s[i]+j)
return sl
第三关
from random import *
#第一题
def findNomap(A, f):
for a in A:
mapped = False
for m in f:
if m[1] == a:
mapped = True
break
if mapped == False:
return a
return None
def mapping(A, f):
# 请在下面编写代码
#********** Begin **********#
if len(A) == 1:
return A
elif findNomap(A,f) != None:
a = findNomap(A,f)
A.remove(a)
for i in f:
if i[0] == a or i[1] == a:
f.remove(i)
return mapping(A,f)
else:
return A
#********** End **********#
# 请不要修改下面的代码
#第二题
def InsertSort(seq, i):#这里直接忽视了i,
# 请在下面编写代码
#********** Begin **********#
for i in range(len(seq)):
a = i
# a=0时不排
#a=1时 第0个和第1个数进行排序,
#a=2时 将第2个数与前面排好了最大数,也就是最后一个数进行比较
#如果 第2个数比第1个数小,则交换位置,再与第0个数比较
#如果 第2个数比第1个数打就,不进入循环排序默认已经排好
#之后在考虑下一个数
while seq[a-1] > seq[a] and a-1 >= 0:
seq[a], seq[a-1] = seq[a-1], seq[a]
a -= 1
return seq
#********** End **********#
# 请不要修改下面的代码
#第三题
def SelectSort(seq, i):
# 请在下面编写代码
#********** Begin **********#
if i == 0:
return
else:
tmp = seq[0]
size = 0
for j in range(i+1):
if(seq[j]>tmp):
tmp = seq[j]
size = j
seq[size] = seq[i]
seq[i] = tmp
SelectSort(seq, i-1)
#********** End **********#
#请不要修改下面的代码
#第四题
def QuickSort(seq):
#请在下面编写代码
#********** Begin **********#
if(len(seq)==0):
return seq
else:
a = seq[0]
b = []
c = []
d = []
for i in range(len(seq)):
if(seq[i]<a):
b.append(seq[i])
elif(seq[i] == a):
c.append(seq[i])
else:
d.append(seq[i])
return QuickSort(b)+c+QuickSort(d)
第四关
from random import *
from time import clock
#********** Begin **********#
#第一题
def minPathCost(cost, i, j):
# 请在下面编写代码
#********** Begin **********#
if i == 0 and j == 0:
return cost[0][0]
elif i == 0 and j!= 0:
return cost[0][j]+minPathCost(cost, 0, j-1)
elif j == 0 and i != 0:
return cost[i][0]+minPathCost(cost, i-1, 0)
else:
return min(cost[i][j]+minPathCost(cost, i-1, j),cost[i][j]+minPathCost(cost, i, j-1))
#********** End **********#
# 请不要修改下面的代码
#第二题
def minPathCost_Memo(cost, i, j, memo):
# 请在下面编写代码
#********** Begin **********#
dp = [[0]*(j+2)]*(i+1)
for x in range(i+1):
for y in range(j+1):
if (x == 0 and y!= 0):
dp[x][y+1] = dp[x][y]+cost[x][y]
elif (x != 0 and y == 0):
dp[x][y+1] = dp[x-1][y+1]+cost[x][y]
else:
dp[x][y+1] = min(dp[x-1][y+1]+cost[x][y],dp[x][y]+cost[x][y])
return dp[i][j+1]
#********** End **********#
# 请不要修改下面的代码
#第三题
def countWays(n):
# 请在下面编写代码
#********** Begin **********#
if n == 1:
return 1
elif n==2:
return 2
else:
return countWays(n-1)+countWays(n-2)
#********** End **********#
# 请不要修改下面的代码
#第四题
def countWays_Memo(n):
# 请在下面编写代码
#********** Begin **********#
a = 1
b = 2
for i in range(n-2):
c = a+b
a = b
b = c
return c