7-27 兔子繁衍问题(15 分)

简介: 7-27 兔子繁衍问题(15 分)

// 我的思路是三种状态兔子总和<n,第三种状态兔子可以生,在循环里递推。题解思路是斐波那契


// 卡壳,原因是题目的误导性太强了


从出生后第3个月起每个月都生一对兔子,题目的真正意思是兔子长到第三个月的瞬间立刻生一对兔子,也就是二月成熟,花一个月生一对兔子


// 从原文完全看不出这个真正的意思,不知道是不是我语文不好


// 有歧义的题尝试列下情况


// 第一个月 兔子1,出生状态


// 第二个月 兔子1


// 第三个月 兔子1+1


// 第四个月 一开始的兔子生1


// 第五个月 一开始的兔子生1,一开始的兔子的子一代生1


// 题目清楚地说明了兔子刚出生是属于第一个月,理解了这第一个月指的是什么就好办了


// 首先第1个月肯定是一个时间跨度,不可能是兔子出生的时间点


// 那它指的就是兔子被称为“出生第一个月”到“出生第二个月”中间的间隔1->2


// 第二个月就是2->3


// 那第三个月就是3->4,此时就应该生兔子了,也就是一直兔子出生到月份+2就生兔子了,


// 此时可以发现,新出生的兔子数量就是”出生第二个月“到“出生第三个月后”的兔子数量总和,也就是这两种兔子没有区别,可以直接合并,


// 这样就可以在循环中递推每一种兔子的数量了


// “出生第一个月”的兔子数量 = ”出生第二个月“到“出生第三个月后”的兔子数量总和,


// ”出生第二个月“到“出生第三个月后”的兔子数量总和 要多加原来”出生第一个月“的兔子数量


// 用c1表示”出生第一个月“的兔子数量,c2表示”出生第二个月“到“出生第三个月后”的兔子数量总和,代码如下


// 从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死
// 请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
// 内容重复,用递归
// 兔子数量共享,用全局
// 兔子年龄不共享,用局部,
// 兔子年龄为3时开始调用递归,开始加兔子数量,数量达到了n就返回
// 递归没写好,换模拟
// int cnt = 2;
int t;
int n;
// void dfs(int year){
//     while(cnt < n){
//         year++;
//         t++;
//         cout << t << endl;
//         if(year >= 3){
//             dfs(0);
//             cnt+=2;
//         }
//     }
//     return;
// ,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?,t = 1;
// 我的思路是三种状态兔子总和<n,第三种状态兔子可以生,在循环里递推。题解思路是斐波那契
// 卡壳,从出生后第3个月起每个月都生一对兔子,题目的真正意思是兔子长到第三个月的瞬间立刻生一对兔子,也就是二月成熟,花一个月生一对兔子
// 从原文完全看不出这个真正的意思,不知道是我语文不好还是出题人语文不好,
// 有歧义的题尝试列下情况
// 第一个月 兔子1,出生状态
// 第二个月 兔子1 
// 第三个月 兔子1+1
// 第四个月 一开始的兔子生1
// 第五个月 一开始的兔子生1,一开始的兔子的子一代生1
// 题目清楚地说明了兔子刚出生是属于第一个月,理解了这第一个月指的是什么就好办了
// 首先第1个月肯定是一个时间跨度,不可能是兔子出生的时间点
// 那它指的就是兔子被称为“出生第一个月”到“出生第二个月”中间的间隔1->2
// 第二个月就是2->3
// 那第三个月就是3->4,此时就应该生兔子了,也就是一直兔子出生到月份+2就生兔子了,
// 此时可以发现,新出生的兔子数量就是”出生第二个月“到“出生第三个月后”的兔子数量总和,也就是这两种兔子没有区别,可以直接合并,
// 这样就可以在循环中递推每一种兔子的数量了
// “出生第一个月”的兔子数量 = ”出生第二个月“到“出生第三个月后”的兔子数量总和,
// ”出生第二个月“到“出生第三个月后”的兔子数量总和 要多加原来”出生第一个月“的兔子数量
// 用c1表示”出生第一个月“的兔子数量,c2表示”出生第二个月“到“出生第三个月后”的兔子数量总和,代码如下
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int t,n;
int main(){
   cin >> n;
    int c1 = 1,c2 = 0;
    t = 1;
    while(c1+ c2 < n){
       int  a =c1,b = c2;
        c1 = b;
        c2 += a;
        t++;   
    }
    cout << t<< endl;
    return 0;
}
目录
相关文章
|
6月前
7-33 出生年 (15 分)
7-33 出生年 (15 分)
70 0
|
6月前
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月的兔子对数为多少?
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月的兔子对数为多少?
100 3
|
5月前
LeetCode575——分糖果
LeetCode575——分糖果
25 0
wustojc2013分糖果
wustojc2013分糖果
42 0
wustojc2013分糖果
L1-033 出生年 (15 分)(简单解法)
L1-033 出生年 (15 分)(简单解法)
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生 一对兔子。假如兔子都不死,要求输出一年内兔子的数量是多少
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生 一对兔子。假如兔子都不死,要求输出一年内兔子的数量是多少
261 0
|
测试技术
L2-003 月饼 (25 分)(贪心)
L2-003 月饼 (25 分)(贪心)
76 0
(二分)1227. 分巧克力
(二分)1227. 分巧克力
76 0
L1-033 出生年 (15 分)
L1-033 出生年 (15 分)
211 0
L1-033 出生年 (15 分)