列表

详情


CPP36. 不死神兔问题

描述

有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第 n 个月的兔子对数为多少?

输入描述

键盘输入任意一个正整数 n,n 的范围为 [1, 20]

输出描述

输出第 n 个月兔子的对数

示例1

输入:

1

输出:

1

示例2

输入:

2

输出:

1

示例3

输入:

3

输出:

2

示例4

输入:

4

输出:

3

示例5

输入:

5

输出:

5

示例6

输入:

6

输出:

8

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 392KB, 提交时间: 2022-02-09

#include <iostream>
using namespace std;

int getSum(int n);

int main() {

    int n;
    cin >> n;

    cout << getSum(n) << endl;

    return 0;
}
//1 2 3 4 5 6 7 8 9
//1 1 2 3 5 8
int getSum(int n) {

    /* write your code here......
    if(n==1||n==2)
        return 1;
    return getSum(n-1)+getSum(n-2);*/
    if(n<=2)
        return 1;
    else{
        int a=1,b=1;
        int sum=2;
        for(int i=3;i<=n;++i){
            sum = a+b;
            b=a;
            a=sum;
        }
        return sum;
    }
}

//g(6)=g(5)+g(4)=8
//g(5)=g(4)+g(3)=5
//g(4)=g(3)+g(2)=3
//g(3)=g(2)+g(1)=2
//g(2)=1
//g(1)=1

C++ 解法, 执行用时: 2ms, 内存消耗: 396KB, 提交时间: 2021-12-05

#include <iostream>
using namespace std;

int getSum(int n);

int main() {

    int n;
    cin >> n;

    cout << getSum(n) << endl;

    return 0;
}

int getSum(int n) {

    // write your code here......
    if (n <= 2)
        return 1;
    else 
    {
        int a = 1;
        int b = 1;
        int sum = 2;
        for (int i = 2; i < n; ++i)
        {
            sum = a + b;
            b = a;
            a = sum;
        }

        return sum;
    }

    return 0;
}

C++ 解法, 执行用时: 2ms, 内存消耗: 404KB, 提交时间: 2021-11-16

#include <iostream>
using namespace std;

int getSum(int n);

int main() {

    int n;
    cin >> n;

    cout << getSum(n) << endl;

    return 0;
}

int getSum(int n) {

    // write your code here......
    if(n<3){
        return 1;
    }
    else
        return getSum(n-1)+getSum(n-2);

}

C++ 解法, 执行用时: 2ms, 内存消耗: 412KB, 提交时间: 2021-11-22

#include <iostream>
using namespace std;

int getSum(int n);

int main() {

    int n;
    cin >> n;

    cout << getSum(n) << endl;

    return 0;
}

int getSum(int n) {

    // write your code here......
int sum=0;
int num[n];
    for(int i=0;i<n;i++)
    {
        num[0]=0;
        num[1]=1;
        num[i+2]=num[i+1]+num[i];
        sum=num[n-2]+num[n-1];
    }
    if(n==1)
        return 1;
    else
        return sum;
}

C++ 解法, 执行用时: 2ms, 内存消耗: 412KB, 提交时间: 2021-10-17

#include <iostream>
using namespace std;

int getSum(int n);

int main() {

    int n;
    cin >> n;

    cout << getSum(n) << endl;

    return 0;
}

int getSum(int n) {

    // write your code here......
    if(n<1 || n >20) return -10086;
    
    int a = 0, b = 1;
    while( --n )
    {
        int tmp = b;   b += a;   a = tmp;
    }
    
    return b;

}

上一题