蓝桥杯:母牛的故事[两种解法]
题目描述
时间限制:1Sec ;内存限制:128MB
内容:
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。
请编程实现在第n年的时候,共有多少头母牛?
输入:
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
输出:
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
样例:
输入
1 | 2 |
输出
1 | 2 |
思路
两种方法:
- [递归]利用D&C方法,递归函数,分而治之。
- [迭代]理解题目内容,化繁为简。
!!注意!!结果会超过int范围,要用long int!!
递归法
分而治之,将大问题分解成小问题:
该题目中可以以每头牛为单位进行问题分解,计算一头牛的规律,之后利用递归解决所有牛。
一头牛可以分为两个阶段:
- 非生育期(三年
- 生育期(之后
生育期每年可以生产一头新牛,也包含这两个阶段;
假设计算时,一头牛的年龄为n年(n>3),则前三年可以看做数量1头,之后可以看做1+x1+x2+…
(其中,x为其子代代表的数量)
即:将牛看做一条分支
那么:可以将这代牛的年数设为参数,建立一个函数:
1 | long int cow(int year){ |
再综合条件得出主函数:
1 | long int add(int); |
很多题目都可以用D&C方法,简单化解;
迭代法
深刻理解题目:列举出前四年的牛数:
1 | 1、2、3、4 |
到第五年时,可以生育的牛的数量为第二年的牛总数(小牛可以在第四年生育)
第五年总牛数为:上一年牛数+新生育牛数 = 第四年+第二年
第六年总牛数为:上一年牛数+新生育牛数 = 第五年+第三年
第七年总牛数为:上一年牛数+新生育牛数 = 第六年+第四年
…
…
以此类推,可以用数列求解
1 | int main() |
THE END
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Taiga_A!
评论