python2.7練習小例子(十)
阿新 • • 發佈:2018-04-25
ali 輸入 spa gb2 list ont 數列 結果 weight
10):古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
程序分析:兔子的規律為數列1,1,2,3,5,8,13,21....
程序源代碼:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
f1 = 1
f2 = 1
for i in range(1,22):
print ‘%12ld %12ld‘ % (f1,f2),
if (i % 3) == 0:
print ‘‘
f1 = f1 + f2
f2 = f1 + f2
以上實例輸出結果為:
1 1 2 3 5 8
13 21 34 55 89 144
233 377 610 987 1597 2584
4181 6765 10946 17711 28657 46368
75025 121393 196418 317811 514229 832040
1346269 2178309 3524578 5702887 9227465 14930352
24157817 39088169 63245986 102334155 165580141 267914296
#!/usr/bin/python
# -*- coding: UTF-8 -*-#
#遞歸做,非常慢。計算n=36就要大概七八秒吧
def fib(n):
if n==1 or n==2:
return 1
else:
return fib(n-1)+fib(n-2)
print fib(36)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# time 為第幾個月,n 為 3
def rabbit(time,n):
if time<1:
return 0
elif time==1:
num=1
elif time<n:
num=1
else:
num=rabbit(time-1,n)+rabbit(time-(n-1),n)
return num
print rabbit(25,3)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def rabbit(num):
f1 = 1
#第一個月為1
f2 = 1
#第二個月為1
if num == 1 or num == 2:
return 1
else:
for i in xrange(num-1):
f1,f2 = f2,f1+f2
return f1
# 第三十六月兔子數量
print rabbit(36)
使用斐波那契數列:
# !/usr/bin/python
# coding=UTF-8
n = int(raw_input("第幾個月: "))
# 斐波那契數列的通項公式
f =(1/(5**0.5))*(((1+(5**0.5))/2)**n - ((1-(5**0.5))/2)**n)
print "第%d個月:共%d只" % ( n,f)
Python3 參考方法:
#!/usr/bin/python3
def rabbit(n):
count = [1,0,0] #將兔子成長期分為三個月
for i in range(1,n): #每個月更新一次不同成長期的兔子對數
count[2] = count[2] + count[1]
count[1] = count[0]
count[0] = count[2]
return count[0]+count[1]+count[2] #返回兔子對數總數
n = int(input("查看第幾個月的兔子對數:"))
rabbit_sum = rabbit(n)
print("第%d個月的兔子對數為%d"%(n,rabbit_sum))
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
def Rabbit(num):
i = 1
a,b = 1,1
while i <= num:
yield a
i += 1
a,b = b,a+b
list = [x for x in Rabbit(20)]
print(list)
# -*- coding: utf-8 -*-
Rabbits={‘rabbits‘:0} # 新生兔子
home=[{‘rabbits‘:1}] # 所有兔子對都在這個列表中,初始按過完一月計算
month=int(raw_input(‘請輸入月份:‘))
time=1 # time 表示已經過完的月數,到了該月月末。
while time <month:
for j in home:
if j[‘rabbits‘]>=2:
home.append(Rabbits.copy())
else:
j[‘rabbits‘]+=1
time+=1
print ‘兔子數量為 %u。‘% len(home)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = 1
b = 1
for i in range(1,21,2):
print ‘%d %d‘%(a,b),
a += b
b += a
# -*- coding: UTF-8 -*-
def rabbit(n):
if n == 1:
return [1]
if n == 2:
return [1,1]
rabbits = [1,1]
for i in range(2,n):
rabbits.append( rabbits [-1] + rabbits [-2]) #取List倒數第一個和倒數第二個數值相加
return rabbits
print rabbit(18) #第十八個月的數量
all_rabbit = []
class Rabbit():
def __init__(self, birthday):
self.birthday = birthday
all_rabbit.append(self)
def makechild(self, month):
if month-self.birthday>=2:
Rabbit(month)
Rabbit(1)
for i in range(1, 22):
[j.makechild(i) for j in all_rabbit[:]]
print(len(all_rabbit))
簡單的練習小例子,有興趣的可以來試試。如果感覺不錯的話,請多多點贊支持哦。。。
原文鏈接:https://blog.csdn.net/luyaran/article/details/80046801
python2.7練習小例子(十)