本文章,详细阐述了本人第一次遇到这种问题的思路,和刷了相关题之后的思路。
首先阐述了第一次遇到这种问题的思路。
详细如下:
首先分析问题:面对这样的繁殖问题,可以考虑递推;个人第一次面对这种问题时的思路过程:
1.明确我的目标我要求第N年,那么如果我要求第100年怎么办?
我发现,我很难算出第100年的情况。
2. 那我退而求其次,在纸上列出表格,看能不能找出什么规律。
第零年 | 第一年 | 第二年 | 第三年 | 第四年 | 第五年 | 第六年 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 6 | 9 | 13 |
找规律,假如能找出一个数学公式的话,问题就容易解决了。
分析表格:前四年都是开始的母牛生下的孩子。从第四年开始,第一年出生的牛也开始生下孩子。写出分解运算,联想之前接触过的一些数组。第四年的6会不会是第三年加上第二年呢?4+3为7,显然不合理。再分析,6=4+2。
这个时候,结合实际问题。牛可以分解为:已经存在的牛+这一年生育的牛。
那么已经存在的牛是第三年有的牛。问题解决了一半。
3. 这个时候需要分析,这一年生育的牛。根据一般规律。6=4+2;9=6+3;13=9+4;再结合题目中,牛在第三年成熟,不难发现,这一年生育的牛是三年前成熟的牛。
4. 我们得到了数列的单项公式。an=a(n-1)+a(n-3)
5. 接下来进行代码实现。大致如下:
/*有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,
每年年初也生一头小母牛。编程实现在第n年的时候,共有多少头母牛?分析:类似于兔子生兔子的问题
牛的总数等于,前一年的牛+出生的牛(n-3);
递归过程中,子问题,n-1年的牛也为:前一年的牛+出生的牛(n-3)n-3年的牛也为:前一年的牛+出生的牛(n-3)
递归结束条件:n=4时,第一次有出生的牛成熟。因该为n等于1,2,3时的值
*/
#include<iostream>
using namespace std;
int F(int n) {if (n == 0) return 1; //第0年,初始牛为1else if (n == 1) return 2; //第二年,母牛生了一个,else if (n == 2) return 3;else if (n == 3) return 4;/*或if(n<4) return n+1;*//*if(n<0) return 1;if(n==0) return 1;*/else if (n >= 4) return F(n - 1) + F(n - 3); //牛的数目是,前一年的牛+生的牛。。。
} //生的牛的总数是,三年前的牛的数目。 因为牛第四年才能生育
int main() {int F(int n);int N;cout << "几年,小兄弟" << endl;cin >> N;cout << F(N);
}
总结一下这种题目的思路:
下面放上代码的图片。
之后会详细记录学习C++、数据结构、算法设计与分析过程中刷到的题目和感悟。仅供自己学习使用,如果恰好这篇文章能帮到你,不甚荣幸,需要代码的自行拿走,写错的请多多包容,共同学习,共同进步。
本文发布于:2024-02-05 03:34:28,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170723102562703.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |