zoukankan      html  css  js  c++  java
  • 杭电ACM2018--母牛的故事

    母牛的故事

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 120200    Accepted Submission(s): 58541


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

     
    这道题涉及的内容是递归化成递推,这类型的题以后会演化成动态规划,重在练习和思考!!
    首先拿到题目想到的就是动物繁殖典型例子斐波那契数列,fn=f(n-1)+f(n-2)
    同样的,本题可以枚举他前十个数来观察,很多题目都可以这么做,ACM一部分感觉就是在玩小学找规律T T
    回到正题··然后得到fn=f(n-1)+f(n-3)
    有了这个就可以直接递归了AC了~~
    再深入一些学习这道题,把繁琐的递归转成迭代,我个人是用两个概念来引导自己思考
    1.有所有状态的状态方程
    2.找出各个状态的转换式
    状态方程即是  fn=f(n-1)+f(n-3)
    转换式可以这么尝试,举个例子吧~
    如:
    假如每年的牛数量都是已知的
    第四年的牛等于第三年的牛加第一年的牛
    第五年的牛等于第四年的牛加第二年的牛 
    fn=f1+f3;   这里完成了fn的状态转化
     
    第一年的牛过了一年成了第二年的牛
    f1=f2;  这里完成了f1的状态转化

    第三年的牛过了一年成了第四年的牛
    f2=f3;  这里是记录第二年过了一年成第三年没用上的
    f3=fn;  这里完成了f2的状态转化
    然后就可以有以下代码


    #include<stdio.h>
    //递归 
     int sum(int n)
    {
        if (n <= 4) return n;
        else return (sum(n-1) + sum(n - 3));
    }
    int main()
    {
        int n;
        while (~scanf("%d", &n) != EOF&&n!=0)
            printf("%d
    ", sum(n));
        getchar();
        return 0;
    }
    #include<stdio.h>
    //迭代 
    int main()
    {
        int f1,f2,f3,fn,i,n;
        while(~scanf("%d",&n)&&n!=0)
        {
            if(n==1)fn=1;
            else if(n==2)fn=2;
            else if(n==3)fn=3;
            else
            {
                f1=1;
                f2=2;
                f3=3;
                for(i=4;i<=n;i++)
                {
                    fn=f1+f3;
                    f1=f2;       
                    f2=f3;
                    f3=fn;    
                }
            }    
            printf("%d
    ",fn);
        }
        return 0;
     } 
  • 相关阅读:
    【结对编程收获】
    【第二次个人作业】结对作业Core第一组:四则运算生成PB16061082+PB16120517
    【第七周读书笔记】读《计算机系统详解》
    【第五周课堂作业】创新案例分析
    【第六周读书笔记】计算机体系结构读后感
    个人总结——马睿淳
    团队项目心得(6.15)
    团队项目心得
    《代码大全》读书笔记——第九周
    《我是一只IT小小鸟》(续)读书笔记——第八周
  • 原文地址:https://www.cnblogs.com/lightice/p/10261270.html
Copyright © 2011-2022 走看看