假设一对兔子每月能生一对小兔(一雌一雄),每对小兔出生后的下一个月是没有繁殖能力的,至出生后的第三个月开始又可以每月生一队小兔,问从一对刚出生的小兔开始,经过若干个月后一共有多少兔子(假设在此过程中兔子没有死亡)?
这个问题是意大利数学家菲波那契(Fibonacci)在他1202年出版的《算盘全书》中提出来的,从第一对刚出生的小兔开始每月的兔子数被乘坐菲波那契序列。
输入的第一个数为n,接下来有n个数字。每个数字为一个月份m(m<=45)。
输出为n行,每行为第m个月后的兔子总数。
超时了吧! 使用递归计算菲波那契序列,这合适吗? 用数组写比较方便,用循环直接算也不超时。
思路:
使用斐波那契序列不合适。。瓦不服 结果用完斐波那契输入45等了10s才输出了一大串数。所以数组真的强无敌。
我服。其实不用lld的话45会超界。但是oj上好像用int也算对。
还有在for循环里int数组是个不好的习惯。不要学。。
代码:
#include <stdio.h> #include <string.h> int main() { int i, n, s, c; scanf("%d",&s); for(c = 1; c <= s; c++) { scanf("%d",&n); long long int a[47] = {1,2}; for(i = 2; i <= n; i++) { a[i] = a[i - 1] + a[i - 2]; } printf("%lld\n",a[n - 1]); } return 0; }