开始试图进入蓝桥杯竞赛的世界(母牛的故事)

259 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。
想要试试竞赛了,目标就先是蓝桥杯吧
冲冲冲!!!
语言的话,我可能偏向于c语言还有Java
今天先来第一个题目吧
【递归】母牛的故事
题目:有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
输出
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。\

输入输出
22
44
56
0

n=0表示输入数据的结束,不做处理。

以下是代码段,我的做法比较简单,先把输入作为数组,一起输入,而不是单个输入,然后用函数完成以下内容,大家应该都知道这套题需要使用斐波那契数列来完成,大家可以参考一下我的代码

#include<stdio.h>
#define N 55
int daan[N];
void fbnq(int n);
int main()
{
	int a[N],i,j;
	fbnq(N); 
	for(i=0;i<N;i++)
	{
		scanf("%d",&a[i]);
		if(a[i]==0)
		break;
	}
	for(j=0;j<i;j++)
	{
		if(a[j]<4)
		{
			printf("%d\n",daan[a[j]]);
		 } 
		 else
		 {
		 	printf("%d\n",daan[a[j]-1]+daan[a[j]-3]);
		 }
	}
	return 0;
}
void fbnq(n)
{
	int i;
	for(i=1;i<n;i++)
	{
		if(i<4)
		{
			daan[i]=i;
		}
		else
		{
			daan[i]=daan[i-1]+daan[i-3];
		}
	}
}


结构:
1.输入:

for()语句
数组存储输入信息(一口气存储,一口气输出)
2.实现算法:

设置枚举函数,先计算好所有数值对应的结果存储好,直接调用(避免重复调用)
3.输出:

对应数组大小,设置循环次数 输出直接使用实现算法的函数计算的的值(已存储在数组中,直接调用对应的数组即可) 总结:

主要用了“斐波那契数列”的知识来解答
函数递归来解题,导致时间超时,问题是由于每次解答一题要递归好几次 题目中的 0<n<55头牛的条件没用上,所以换个思路,先循环一次把到55头牛在斐波那契数列中的排列记录下来,之后解题时候调用数列就快了很多。
总体使用了两个数组(一个存储输入信息,一个存储算法函数计算出的结果值),一个算法实现函数(monther_cow2(int n)),主函数先调用算法实现函数实现枚举,再输入,输出 重要在于先枚举,总结出规律,设计算法