题解 | #统计每个月兔子的总数#
统计每个月兔子的总数
http://www.nowcoder.com/practice/1221ec77125d4370833fd3ad5ba72395
import sys import math ''' 用an表示第n个月生完之后的兔子总数 用an(ns)表示第n个月能生的兔子,用an(bns)表示第n个月还不能生的兔子 能生的兔子每兔生一个,贡献自身1倍的数量,不能生的兔子不加数量,因此: an = an(ns)x2 + an(bns) 过3个月起才能开始生,因此,第n个月能生的兔子就是两个月之前的兔子们;第n个月不能生的兔子是两个月前到本月之间出生的兔子,也就是上个月出生的兔子: an(ns) = a(n-2) an(bns) = a(n-1)-a(n-2) an = a(n-2)x2+a(n-1)-a(n-2) an = a(n-2)+a(n-1) 即为斐波那契数列 ''' def caculateRabbit(month): a = 1 b = 1 if month<1: print("数据小于1,无法计算") return -1 if month==1 or month==2: return 1 for n in range(month-2): temp = a a = b b = temp + a return b if __name__=="__main__": for line in sys.stdin: n = int(line) print(caculateRabbit(n))