UVA, 11000 Bee

题意:有种蜜蜂,每年雄蜂产一只雌蜂和雄蜂,然后死掉,雌蜂产一只雄蜂,然后死掉,现有一只不会死的雌蜂,问N年后雄蜂的个数和总蜜蜂数

思路:递推+题意

设今年雄蜂个数为m[x],去年为m[x-1],

今年雌蜂个数为f[x],去年为f[x-1]

则根据题意可得:

  m[x]=f[x-1]+m[x-1];

  f[x]=m[x-1]+1

  ps:根据递推也可得雌蜂个数满足斐波拉切数列即:f[x]=f[x-1]+f[x-2]

代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 long long n;
 5 #define MAXN 100
 6 long long f[MAXN],m[MAXN];
 7 
 8 bool datecin()
 9 {
10     if(scanf("%lld",&n)!=EOF)
11     {
12         if(n==-1)
13             return false;
14         return true;
15     }
16     return false;
17 }
18 
19 void datecal()
20 {
21     int i;
22     f[0]=1,m[0]=0,f[1]=1,m[1]=1;
23     for(i=2;i<MAXN;i++)
24     {
25        f[i]=f[i-1]+f[i-2];
26        m[i]=m[i-1]+f[i-1];
27     }
28 }
29 
30 void showres()
31 {
32     printf("%lld %lld
",m[n],m[n]+f[n]);
33 }
34 int main()
35 {
36     datecal();
37     while(datecin())
38     {
39         showres();
40     }
41     return 0;
42 }
原文地址:https://www.cnblogs.com/byzsxloli/p/5397586.html