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