每日一练-蓝桥杯训练题解-母牛的故事(问题:1004)

题目描述:
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
输出
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
样例输入
2
4
5
0
样例输出
2
4
6

解题思路
首先,对于这道题我们要有个简单得认识,类似兔子问题,我们需要找出其中的规律,所以,列表看看数据,也就是每一年的牛数

年数 1 2 3 4 5 6 7 8 9
个数 1 2 3 4 6 9 13 19 28

从牛的生育起始时间开始寻找规律,刚出生的牛具备生育能力是在第4个年头,也就是说
假设该牛的出生是在第2年 现在 到第5年的时候 它就可以生了 那么我们再看看 在第5年能生育的牛有多少头 ? 是不是距第五年有4年距离的第二年的牛数?所以,我们对表

  • 第5年 ---- 4+2 = 6
  • 第6年 ---- 6+3 = 9
  • 第7年 ----9+4 = 13

也就是:第n年的牛的个数 = 上一年的牛数(n-1)+四年前牛的个数(也就是具有生育的能力的个数)(n-3)

公式:Fn = Fn-1+Fn-3

参考代码

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int n, F[55];
	F[1] = 1;
	F[2] = 2;
	F[3] = 3;
	F[4] = 4;
	for (int i = 5; i < 55; ++i) 
	{
		F[i] = F[i - 1] + F[i - 3];   //利用思路中的公式  将数据算好  避免了重复计算 
	}
	while (scanf("%d", &n) != EOF && n > 0 && n < 55)
	{
		printf("%d\n", F[n]);
	}
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42792088/article/details/86633044