zoukankan      html  css  js  c++  java
  • 蓝桥杯练习:母牛的故事

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

    题意解读:1、新生小牛在第四年生小牛,可以理解为:新生小牛从出生到满三年之后生小牛,如第二年出生的小牛,在第五年生新的小牛(2 + 3 = 5);

            2、第n年的牛数来源于两个地方,可以理解为:第n-1年的牛数+第n-3年的牛数,即f(n) = f(n-1)+f(n-3);

         3、n-1:上一年的牛数在下一年都会出生一头新的小牛;

         4、n-3:三年前出生的牛会在今年开始生下新的小牛;

         
    两种方法:<将方法一或者方法二取消注释就能运行>

    #include <stdio.h>
    void main() {
        int N;
        ////方法一:递归
        //while (scanf("%d",&N)&&N!=0)/*这里注意下,‘scanf’默认有个int类型的返回值,若输入的数字未被接收(这里是N接收输入的值),则返回0,若有n个输入值,则 返回n,若读入数据时遇到了“文件结束”则返回EOF(即-1);所以,将条件scanf("%d",&N)&&N!=0换成scanf("%d",&N)!=0无法跳出while循环(按照题目要求,输入0跳出循环)。*/
        //{
        //    int a1 = 1, a2 = 2, a3 = 3,an;
        //    int i;
        //    if (N<4&&N>0)//小细节,注意N要大于0
        //    {
        //        printf("%d ", N);
        //        
        //    }
        //   else if(N>=4) {          
        //        for (i = 4; i <= N; i++)//递归出口
        //        {
        //            an = a1 + a3;
        //            a1 = a2;
        //            a2 = a3;
        //            a3 = an;//递归条件
        //        }
        //        printf("%d ", an);
        //    }
        //}

        ////方法二:数组递推
        //int array[56];//大于等于56都行,因为题目要求输入55,数组是从下标1至55,所以56为结束位‘’;
        //array[1] = 1, array[2] = 2, array[3] = 3;//
        //for (;scanf("%d",&N)&&N!=0; )//此处for循环不需要循环变量赋初值和循环变量增值;其他和while循环相同;
        //{
        //    if (N<4&&N>0)
        //    {
        //        printf("%d ", N);
        //    }
        //    else
        //    {
        //        int i;//
        //        for (i = 4; i <= N;i++) {
        //            array[i] = array[i - 1] + array[i - 3];//将每一年的牛数计算出来并存储在数组array[i]中;
        //        }
        //        array[i] = '';
        //        printf("%d ",array[N]);//i = N+1;
        //    }
        //}
    }

  • 相关阅读:
    面试题32
    面试题28. 对称的二叉树
    面试题55
    面试题04. 二维数组中的查找
    面试题58
    面试题57. 和为s的两个数字
    如果Python对于磁盘没有写入权限,还会运行吗?
    Python中的import语句
    Python决定一个变量时局部的,还是全局的,是在编译期
    Python中的Comprehensions和Generations
  • 原文地址:https://www.cnblogs.com/destiny-2015/p/11766626.html
Copyright © 2011-2022 走看看