首页 > 试题广场 >

统计每个月兔子的总数

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

输入描述:

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



输出描述:

输出对应的兔子总数

示例1

输入

3

输出

2
#include <stdio.h>

int main() {
//1 * 1
//2. * 1
//3. * * 2
//4. * * * 3
//5. ** * ** 5
//6. *** ** ***. 8
//7. ***** *** ***** 13

int arr[32] = {0};
int num;

scanf("%d", &num);

arr[0] = 1;
arr[1] = 1;

for(int i = 2;i < 32; i++){
arr[i] = arr[i - 1] + arr[i - 2];
}

printf("%d\n", arr[num - 1]);

return 0;
}
发表于 2024-02-19 09:22:25 回复(0)
#include <stdio.h>
int main() {
    int n;
    scanf("%d",&n);
    int adult = 0, two = 0, one = 0;
    for (int i = 1; i <= n; i++) {
        adult += two;
        two  = one;
        if(i==1) one = 1;
        else one = adult;
    }
    printf("%d",adult+two+one);
    return 0;
}

编辑于 2023-12-02 22:23:44 回复(0)
//画图,然后简单的斐波拉契数列
#include <stdio.h>

int num(int n)
{
    if(n == 1||n==2)
    {
        return 1;
    }
    return num(n-1)+num(n-2);
}

int main() {
    int n=0;
    while (scanf("%d", &n) != EOF) {
        printf("%d\n",num(n));
    }
    return 0;
}

发表于 2023-10-10 21:17:33 回复(0)
#include <stdio.h>

int main() 
{
    int new_habbit = 0;
    int one_habbit = 0;
    int old_habbit = 1;

    int month = 0;
    scanf("%d",&month);

    if(month < 3)
    {
        printf("%d",1);
        return 1;
    }

    int k = 3;
    while(k <= month)
    {
        old_habbit += one_habbit;
        one_habbit = new_habbit;       
        new_habbit = old_habbit;      
        k++;
    }

    printf("%d",new_habbit+one_habbit+old_habbit);
    return 0;
}

发表于 2023-08-01 09:31:10 回复(0)
这不就斐波那契数列么?
#include <stdio.h>

int main() {
    int n = 0;
    scanf("%d", &n);
    int a1 = 1;
    int a2 = 1;
    int a3 = 0;
    while(n--)
    {
        a1 = a2;
        a2 = a3;
        a3 = a1 + a2;
    }

    printf("%d", a3);
    return 0;
}

发表于 2023-03-15 15:54:14 回复(0)
#include <stdio.h>

int main() {
    //递归,初始条件递归条件之间的应用;
    int num[32]={1,1};
    for(int i=2;i<32;i++){
        num[i]=num[i-2]+num[i-1];
    }
    int n;
    scanf("%d",&n);
    printf("%d\n",num[n-1]);
    return 0;

}
标准斐波那契数列,先推导出表达式,再直接进行数据的输出即可
发表于 2023-01-01 17:02:07 回复(0)
#include <stdio.h>

int main()
{
  int mon[3] = {1};
  char month, i;
  
  scanf("%d", &month);
  for(i = 1; i < month; i++)
  {
    mon[2] += mon[1];  // 能生育兔子
    mon[1] = mon[0];   // 发育中的兔子
    mon[0] = mon[2];   // 新生的兔子
  }
  
  printf("%d", mon[0] + mon[1] + mon[2]);
}

发表于 2022-08-16 17:41:12 回复(2)
递归:
#include <stdio.h>

int fib(int n){
    if(n<3){
        return 1;
    }
    else{
        return fib(n-1)+fib(n-2);
    }
}

int main(){
    int n;
    scanf("%d",&n);
    printf("%d",fib(n));
} 
递归优化:
#include <stdio.h>
int a[32];

int rb(int n){
    if(n<3){
        return 1;
    }
    else{
        if(a[n]==0){
            a[n]=rb(n-1)+rb(n-2);
        }
        return a[n];
    }
}

int main(){
    int n;
    scanf("%d",&n);
    printf("%d",rb(n));
} 
动态规划:
#include <stdio.h>

int rb(int n){
    if(n<3){
        return 1;
    }
    int dp[n+1];
    dp[1]=dp[2]=1;
    for(int i=3;i<n+1;i++){
        dp[i]=dp[i-1]+dp[i-2];
    }
    return dp[n];
}

int main(){
    int n;
    scanf("%d",&n);
    printf("%d",rb(n));
} 
动态规划优化:
#include <stdio.h>

int rb(int n){
    if(n<3){
        return 1;
    }
    int a,b,c;a=b=1;
    for(int i=3;i<n+1;i++){
        c=a+b;a=b;b=c;
    }
    return c;
}

int main(){
    int n;
    scanf("%d",&n);
    printf("%d",rb(n));
} 
发表于 2022-05-28 11:04:50 回复(0)
#include <stdio.h>
int rabbit(int n)
{
    if(n<3)
    {
        return 1;
    }
    else
    {
        return rabbit(n-1)+rabbit(n-2);
    }
}
int main()
{
    int n,cnt;
    scanf("%d",&n);
    printf("%d\n",rabbit(n));
    return 0;
}
用递归或者动态规划都可以
发表于 2022-04-20 11:51:03 回复(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)
#include<stdio.h>

int count(int n)
{
    if(n==1||n==2)
        return 1;
    else
        return count(n-1)+count(n-2);
}

int main()
{
    int num,res;
    while(scanf("%d",&num)!=EOF)
    {
        res = count(num);
        printf("%d\n",res);
    }
}

发表于 2021-08-21 22:51:40 回复(0)
实际为斐波那契数列
#include<stdio.h>
int main(){
    int month;
    while(scanf("%d", &month) != EOF){
        int chusheng[month],chengzhang[month],chengnian[month],num;
        chengnian[0] = 1;
        chengzhang[0] = 0;
        chusheng[0] = 0;
        if(month >= 2){
            chengnian[1] = 1;
            chengzhang[1] = 0;
            chusheng[1] = 0;
        }
        for(int date = 2; date < month; date++){
            chengnian[date] = chengnian[date-1] + chengzhang[date -1];
            chengzhang[date] = chusheng[date -1];
            chusheng[date] = chengnian[date];
        }
        num = chusheng[month -1] + chengzhang[month -1] + chengnian[month -1];
        printf("%d\n", num);
    }
}
发表于 2021-08-16 11:42:04 回复(0)
最后要输入两次月份,无语了
发表于 2021-07-15 00:13:47 回复(0)

问题信息

难度:
15条回答 59955浏览

热门推荐

通过挑战的用户

查看代码