郑州轻工业大学oj题解(c语言)1364:|郑州轻工业大学oj题解(c语言)1364: 母牛的故事 (兔子数列改版)——数组解法

【郑州轻工业大学oj题解(c语言)1364:|郑州轻工业大学oj题解(c语言)1364: 母牛的故事 (兔子数列改版)——数组解法】昨晚小丧了一下没想到炸出一群以为我快死了的跑来安慰我的。。。其实还好啦,偶尔就会有点小伤感,睡一觉起来基本就没事了的哈哈哈哈哈
今天在社团看了一下午的纸质书,也算过的还算充实吧,现在这个时期能找到机会坐下来好好看纸质书的机会是真的不多了。(2018年生日买的龙族全套,现在还没看完)、
今天的题目是一道和1055极为类似的题目,没印象的朋友也可以看看之前写的题解:https://www.jianshu.com/p/ce671c18cc83

今天这道类似的题目,我们换个思路,用数组来解决问题,同样的,还不熟悉数组的同学也可以看看之前1114的题解,有完整的数组入门~
1364: 母牛的故事
  • 题目描述
    有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
  • 输入
    输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0 n=0表示输入数据的结束,不做处理。
  • 输出
    对于每个测试实例,输出在第n年的时候母牛的数量。
    每个输出占一行。
  • 参考代码:
#include 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; }

  • 代码解析:
  1. 之前1055的时候有好好介绍过这种递推题的理解思路,这里大概讲一遍递推通常用于数列的计算中。f(0)-->f(1)-->f(2)-->f(3),
  2. 这里的母牛前三年的只数都是固定的,所以我们可以先赋值好数组的前三项,这里为了看起来顺眼不会模糊,我们就不赋值a[0]了。
  3. 接下来开始写循环,根据题目要求,以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]。
  4. 最后注意一下每次输出要换行,和计算数量时的循环开始与结束条件即可解决题目。

    推荐阅读