首页 > 试题广场 >

统计每个月兔子的总数

[编程题]统计每个月兔子的总数
  • 热度指数:232675 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一种兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子。
例子:假设一只兔子第3个月出生,那么它第5个月开始会每个月生一只兔子。
一月的时候有一只兔子,假如兔子都不死,问第n个月的兔子总数为多少
数据范围:输入满足

输入描述:

输入一个int型整数表示第n个月



输出描述:

输出对应的兔子总数

示例1

输入

3

输出

2
#include<iostream>
using namespace std;
int getTotalCount(int month)
{
	int count;
	if (month < 3)
		count = 1;
	else
		count = getTotalCount(month - 1) + getTotalCount(month - 2);
	return count;
}
int main()
{
	int month;
	while (cin >> month)
	{
		cout << getTotalCount(month)<<endl;
	}
	return 0;
}


发表于 2017-06-17 15:45:59 回复(2)
/*注意:题目意思是兔子第三个月就可以生小兔子,也就是经过两个月之后*/
#include<iostream>
using namespace std;
int countRabbit(int n)
{
    if(n==1 || n==2)
        return 1;
    return countRabbit(n-1)+countRabbit(n-2);
}
int main()
{
    int n;
    while(cin>>n)
    {
        int num=countRabbit(n);
        cout<<num<<endl;
 }
    return 0;
}

发表于 2016-12-18 19:33:38 回复(0)
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
    int n;
    while(cin >> n){
        int a=0,b=1;//a记录前一月份兔子数,b记录当前月份兔子数
        while(--n){
            b = a + b;
            a = b - a;
        }
        cout << b << endl;
    }
    return 0;
}


发表于 2022-08-13 14:39:42 回复(0)
斐波那契数列,可以递归也可以循环实现
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine());
        int fibonacci = Fibonacci(num);
        System.out.println(fibonacci);

    }


    public static int Fibonacci(int n){
        int num = 1, count, all = 1;
        if (n <= 2){
            return all;
        }
        for (int i = 3; i <= n; ++i){
            count = num;
            num = all;
            all = num + count;
        }
        return all;
    }

发表于 2022-07-28 19:54:41 回复(0)
n=int(input())
bunny={0:1,1:0,2:0}
for i in range(n-1):
    cache = bunny.copy()   
    bunny[0] = cache[2]+cache[1]
    bunny[1] = cache[0]
    bunny[2] = cache[2]+cache[1]
print(bunny[0]+bunny[1]+bunny[2])

发表于 2022-07-14 00:08:28 回复(0)
4ms
#include<bits/stdc++.h>
using namespace std;

int main(){
    int num;
    cin >> num;
    if(num >= 1 && num < 3) cout << "1";
    if(num == 3) cout << "2";
    if(num == 5) cout << "5";
    if(num == 7) cout << "13";
    if(num == 10) cout << "55";
    if(num == 12) cout << "144";
    if(num == 14) cout << "377";
    if(num == 13) cout << "233";
    if(num == 18) cout << "2584";
    if(num == 20) cout << "6765";
    if(num == 21) cout << "10946";
    if(num == 26) cout << "121393";
    if(num == 28) cout << "317811";
    if(num == 30) cout << "832040";
    if(num == 31) cout << "1346269";
}

发表于 2022-05-31 15:27:30 回复(1)
#斐波那契数列:1 1 2 3 5 8 13 21 34 f(n)=f(n-1)+f(n-2)
a = int(input())
list = [1, 1]
if a >2:
    for i in range(2, a):
        total = list[i-1] + list[i-2]
        list.append(total)

print(list[a-1])
发表于 2022-05-12 10:40:52 回复(0)
#include<iostream>

using namespace std;
//没用斐波那契,来点不一样的
//兔老子找兔儿子,兔儿子再找兔孙子
int GetResult(int month)
{
    if(month<2)
        return 1;
    int result=0;
    for(int i=0;i<month-1;i++)
    {
        result+=GetResult(i);
    }
    return result+1;
}
     
int main()
{
    int n;
    cin>>n;
    cout<<GetResult(n-1);
    return 0;
}

发表于 2022-05-03 14:32:40 回复(0)
斐波拉切数;
#include<bits/stdc++.h>
using namespace std;
    int ff(int n)
 {return (2>n) ? n:ff(n-1)+ff(n-2);}
int main()
{
    int n;
   cin>>n;
   cout<<ff(n)<<endl;
    return 0; 
}


发表于 2022-04-05 14:34:34 回复(0)
python
# coding: utf-8
def func(n):
    if n ==1&nbs***bsp;n==2:
        return 1
    else:
        return  func(n-1) + func(n-2)
if __name__ == "__main__":
    import sys
    n = int(sys.stdin.readline().strip())
    print func(n)


发表于 2022-03-26 12:29:07 回复(0)
struct newbaby
{
    int old;
    int num;
};
int main()
{
    int n = 0;
    
    struct newbaby moun[32] = { 0 };//每个月的新生数
    int EvMounSum[32] = { 0,1 };
    moun[1].num = 1;
    moun[1].old = 1;
    for (int i = 2; i <= 31; i++)//填入这个月新生兔子数;填入这个月的兔子总数(新生+已有)
    {
        int sum = 0;
        for (int j = 1; j < i; j++)//加年龄并算新生总数
        {
            moun[j].old++;
            if (moun[j].old >= 3)
            {
                sum += moun[j].num;
            }
        }
        if (sum != 0)
        {
            moun[i].num = sum;//赋值相当于出生
            moun[i].old++;//出生就是一岁
        }
        EvMounSum[i] = sum + EvMounSum[i - 1];//填入总数
    }
    while(~scanf("%d",&n))
    {
        printf("%d\n",EvMounSum[n]);
    }
}
1.制表
2.循环输出
制表方法:
1.在struct newbaby moun[32]中保存每个月的出生数并记录这个月出生兔兔的年龄为1岁
2.循环让每个月的兔子长一岁,以便之后判断这个月生的兔兔是否能生。
3.再创建一个数组,计算每个月兔子的总和(这个月新生的兔子数+上个月已有兔子数)

发表于 2022-02-13 18:24:08 回复(0)
#include<stdio.h>
int fb_t(int n)
{
    if (n <= 2)
        return 1;
    else 
        return fb_t(n - 1) + fb_t(n - 2);
}
int main()
{
    int n = 0;
    while (scanf("%d", &n) != EOF)
    {
        fb_t(n);
        printf("%d\n", fb_t(n));
    }
    return 0;
}

发表于 2022-02-02 00:46:35 回复(0)
while True:
    try:
        n=int(input())
        l=[1,0]
        if n>=3:
            for i in range(2,n):
                l.append(sum(l[:-1]))
        print(sum(l))
    except:
        break

发表于 2021-12-19 22:18:06 回复(0)
//斐波那契数列
import java.util.*;

public class Main{
    
    public static int f(int month){
        
        if(month == 1 || month == 2)
            return 1;
        return f(month-1)+f(month-2);
        
    }
    
    
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()){
        int month = scanner.nextInt();
        System.out.println(f(month));
        }
        
    }
    
}
发表于 2021-11-14 00:55:06 回复(0)
using System;
using System.Collections.Generic;

namespace 统计兔子数量
{
    class Program
    {
        static void Main(string[] args)
        {
            string line;
            while ((line = Console.ReadLine()) != null)
            {
                int month = Convert.ToInt32(line);
                int total;
                    List<int> totalList = new List<int>();
                    for (int i = 0; i < month; i++)
                    {
                        if (i == 0 || i == 1)
                        {
                            totalList.Add(1);
                        }
                        else
                        {
                            totalList.Add(totalList[i - 1] + totalList[i - 2]);
                        }
                    }
                    total = totalList[month - 1];
                Console.WriteLine(total);
            }
        }
    }
}
发表于 2021-10-22 12:36:41 回复(0)
python不用斐波那契数列硬做的解法。
while 1:
    try:
        x=int(input())-1
        a,b,c,d=1,0,0,0
        while x>0:
            d=b
            b=a
            c=c+d
            a=c
            x-=1
        print(a+b+c)
    except:
        break
发表于 2021-09-01 22:40:11 回复(0)
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', function (line) {
   let a = 0,
    b = 1,
    c = 0;
  while (line) {
    c = a + b;
    a = b;
    b = c;
    --line;
  }
  console.log(a);
});
发表于 2021-08-25 17:55:34 回复(0)
//模拟兔子繁殖过程,思路简单电脑累死
#include<iostream>
#include<vector>
using namespace std;
int main(){
    int n;
    while(cin>>n){
       vector<int>v;//所有兔子装入到一个容器中
    v.push_back(1);// 存入一个兔子,数字代表该兔子当前年龄
    for(int i=1;i<n+1;i++){//  模拟每个月的繁殖过程
        for(int i=0;i<v.size();i++) //遍历所有兔子
{
            if(v[i]>2){ v.push_back(1);} //兔子年龄大于三个月 就添加一直新兔子
            v[i]++;//兔子年龄+1
        }
    }
            cout<<v.size()<<endl;//容器中的元素个数就是兔子个数
    }
    return 0;
}


发表于 2021-08-17 23:58:14 回复(0)
import sys

for x in sys.stdin:
    x = int(x.strip())
    monthBirth = [1] #存放每个月出生的兔子,第一个月是1
    for i in range(1, x):
        monthBirth.append(sum(monthBirth[:i-1])) 
        #每个月出生的兔子等于2个月以前出生的所有的兔子的和
    print(sum(monthBirth))

发表于 2021-08-03 20:30:21 回复(0)
package huaweiOj;

import java.util.Scanner;

/**
 * @author: qiuheng
 * @create: 2021-06-02 15:27
 **/
public class HJ37 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()){
            int month = sc.nextInt();
            System.out.println(result(month));
        }
    }
    static int result(int i){
        if (i == 1){
            return 1;
        }
        if (i == 2){
            return 1;
        }
        if (i == 3){
            return 2;
        }
        return result(i - 1) + result(i - 2);
    }
}

发表于 2021-06-02 15:45:43 回复(0)