郑州轻工业大学oj题解(c语言)1364: 母牛的故事 (兔子数
2020-01-10 本文已影响0人
缘点点
昨晚小丧了一下没想到炸出一群以为我快死了的跑来安慰我的。。。其实还好啦,偶尔就会有点小伤感,睡一觉起来基本就没事了的哈哈哈哈哈
今天在社团看了一下午的纸质书,也算过的还算充实吧,现在这个时期能找到机会坐下来好好看纸质书的机会是真的不多了。(2018年生日买的龙族全套,现在还没看完)、
今天的题目是一道和1055极为类似的题目,没印象的朋友也可以看看之前写的题解:https://www.jianshu.com/p/ce671c18cc83
今天这道类似的题目,我们换个思路,用数组来解决问题,同样的,还不熟悉数组的同学也可以看看之前1114的题解,有完整的数组入门~
1364: 母牛的故事
- 题目描述
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛? - 输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。 - 输出
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。 - 参考代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[110];
a[1]=1;
a[2]=2;
a[3]=3;
int n,i;
while(scanf("%d",&n),n!=0){
for(i=4;i<=55;i++){
a[i]=a[i-3]+a[i-1];
}
printf("%d\n",a[n]);
}
return 0;
}
- 代码解析:
- 之前1055的时候有好好介绍过这种递推题的理解思路,这里大概讲一遍递推通常用于数列的计算中。f(0)-->f(1)-->f(2)-->f(3),
- 这里的母牛前三年的只数都是固定的,所以我们可以先赋值好数组的前三项,这里为了看起来顺眼不会模糊,我们就不赋值a[0]了。
- 接下来开始写循环,根据题目要求,以n=0表示输入结束,所以我们就按1080的写法写循环让其=0我们便退出循环即可,题目说每头牛第4年就开始会生新的小牛,也就是第4年的时候,第1年的牛的只数,也就是第4-3年的牛的只数×2,而相对的,第5年的时候,第2年的牛的只数也会×2,所以我们这里得出一下公式:f(x)=f(x-3)+f(x-1),这里f(x)表示这一年的总数,f(x-3)表示相对这一年前三年的牛数,f(x-1)表示前一年的牛数,把他写进代码就成了,a[i]=a[i-3]+a[i-1]。
- 最后注意一下每次输出要换行,和计算数量时的循环开始与结束条件即可解决题目。