题目描述 有一只狗,第三年和第五年生一只狗 ,第六年死去,问 第N年有多少只狗 方法一:找规律,斐波那契数列 #不使用递归构造斐波那契数列 # def fib(n): # a, b = 1, 1 # for i in range(n
题目描述
有一只狗,第三年和第五年生一只狗 ,第六年死去,问 第N年有多少只狗
方法一:找规律,斐波那契数列
#不使用递归构造斐波那契数列# def fib(n):
# a, b = 1, 1
# for i in range(n-1):
# a, b = b, a+b
# return a
#
# # 输出了第10个斐波那契数列
# print fib(10)
# 使用递归构造斐波那契数列
def fib(n):
if n == 1 or n == 2:
return 1
return fib(n - 1) + fib(n - 2)
def dog_num(n):
if n==1:
return 1
if n%2==0:
temp=n/2 #判断是第几个偶数
return fib(temp+1)
else:
temp=(n+1)/2 #判断是第几个奇数
return 2*fib(temp)
n1=int(raw_input())
dog_num(n1)
方法二:利用numpy库
import numpy as npdef dog(dog_age):
dog_age = dog_age + 1 #对列表中的各项都加1
sum_3 = sum(dog_age==3) #统计列表中元素值为3的项数
sum_5 = sum(dog_age == 5)
sum_6 = sum(dog_age == 6)
for c in range(sum_3):
dog_age =np.append(dog_age,1) #dog_age 末尾,追加一个值,但是dog_age是一个对象,调用np.append 不能在原列表上追加,需要重新赋值
for c in range(sum_5):
dog_age =np.append(dog_age,1)
for c in range(sum_6):
dog_age = np.delete(dog_age,0) # 删掉dog_age 第0个元素
return dog_age
dog_age = np.array([0]) # 第一条狗,第一年 0岁
#print (type(dog_age))
#print (dog_age)
for i in range(1,15):
dog_age = dog(dog_age=dog_age)
print (str(i) + ' year later,\t' + str(len(dog_age)) +',\t', dog_age,)
实现思路