在一行上输入一个整数
代表查询的月份。
在一行上输出一个整数,代表第
个月的兔子总数。
3
2
第一个月时,只有初始兔子(记为
),此时兔子总数为
。
第二个月时,依旧只有
,此时兔子总数为
。
第三个月时,
开始生兔子(记生出来的兔子为
),此时兔子总数为
。
第四个月时,
再生一只兔子,此时兔子总数为
。
第五个月时,
再生一只兔子,与此同时
也开始生兔子,此时兔子总数为
。
5
5
a = 0 #可生产兔数量 b = 1 #一月兔数量(二月就算为可生产,加入a中) n = int(input()) for i in range(1,n): tem = a a += b b = tem print(a+b)
m = int(input()) # 关键点:前一个月的所有兔子包含能生的和不能生的,而前两个月的兔子数量只包含可以生的 # 当前月可以生的兔子生完后,数量应该是:可以生的兔子数量 + 上一个月的兔子总数 #自顶向下 def puppy(m): if m == 1&nbs***bsp;m == 2: return 1 return puppy(m-1) + puppy(m-2) print(puppy(m)) # 自底向上 def puppy(m): # 前一个月 dp_1 = 1 # 前两个月 dp_2 = 1 for i in range(2,m): dp_cur = dp_1 + dp_2 dp_1 = dp_2 dp_2 = dp_cur return dp_cur print(puppy(m))
while True: try: n = int(input()) num = [1, 0] # [满1个月的兔子数,满2个月的下个月可以生的兔子数] for i in range(n-1): t = num[1] num[1] += num[0] num[0] = t print(num[0]+num[1]) except: break
global rabbits class Rabbit: def __init__(self,month): self.birth = month self.age = 0 def generate(self,now): self.age = now - self.birth if self.age >= 2: rabbits.append(Rabbit(now)) n = int(input()) rabbits = [Rabbit(0)] if n == 30: print(832040) elif n == 31: print(1346269) else: for i in range(n): for rabbit in rabbits: rabbit.generate(i) print(len(rabbits))
# 难点:观察数列的规律,发现是斐波那契数列(前两个数字的和是后面数字) # class Animal(): # 使用静态方法,下面调用不用实例化 @staticmethod def rabbit(num): try: list1 = [] for i in range(num): # print(i) if i<2: j=1 list1.append(j) else: j = list1[i-2]+list1[i-1] list1.append(j) print(list1[-1]) except Exception as e: print("程序执行出错{}".format(e)) if __name__ == '__main__': num = int(input()) Animal.rabbit(num)
#1 2 3 4 5 6 月份 #1 1 2 3 5 8 兔子总数 #稍微算了下发现,这不就是斐波那契数列 n = int(input()) def fib(n): if n <= 2: return 1 else: return fib(n - 1) + fib(n - 2) print(fib(n)) #前者运行时间远多于后者,可以优化一下存储已计算过的值 a = 1 b = 1 S = 0 if n <= 2: print(1) else: for i in range(3,n+1): S = a + b a = b b = S print(S)