(HDOJ2018)--母猪的故事(另外的思路)_Hanoch_Liu的博客-程序员秘密

技术标签: HDOJ  

根据题意,先列出前几年的牛头数,试着找找规律:

 

第n年:

n=1

n=2

n=3

n=4

n=5

n=6

n=7

n=8

n=9

fn头牛?

f1=1

f2=2

f3=3

f4=4

f5=6

f6=9

f7=13

f8=19

f9=28

我们可以得出这样一个公式:fn=fn-1+fn-3
  再理解一下,fn-1是前一年的牛,第n年仍然在,fn-3是前三年那一年的牛,但换句话说也就是第n年具有生育能力的牛,也就是第n年能生下的小牛数。
  编程序,求解这个公式就行了。
  当然,第1-3年的数目,需要直接给出。
  很像斐波那契数列,有不一样之处,道理、方法一样。其实,在编程之前,讲究先用这样的方式建模。
//解法1:迭代解法  
#include <iostream>  
using namespace std;  
int main()  
{  
    int n,i;  
    int f1, f2, f3, fn;  
    while(cin>>n&&n!=0)  
    {  
        //下面求第n年有几头牛  
        f1=1;  
        f2=2;  
        f3=3;  
        if(n==1)  
            cout<<f1<<endl;  
        else if(n==2)  
            cout<<f2<<endl;  
        else if(n==3)  
            cout<<f3<<endl;  
        else  
        {  
            for(i=4; i<=n; i++)  
            {  
                fn=f3+f1;  
                f1=f2;  //f1代表前3年  
                f2=f3;  //f2代表前2年  
                f3=fn;  //f3代表前1年  
            }  
            cout<<fn<<endl;  
        }  
    }  
    return 0;  
}  
 
[cpp] view plain copy print?在CODE上查看代码片派生到我的代码片
//解法2:定义递归函数(效率低,不建议用)  
#include <iostream>  
using namespace std;  
int f(int n);  
int main()  
{  
    int n;  
    while(cin>>n&&n!=0)  
    {  
        cout<<f(n)<<endl;  
    }  
    return 0;  
}  
  
  
int f(int n)  
{  
    if(n<4)  
        return n; //第1,2,3年,各为1,2,3头  
    else  
        return f(n-1)+f(n-3);  //第n年为前一年的和前3年的相加  
} 

这个思路更高大上一些,感觉我的思路像小孩

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Hanoch_Liu/article/details/104148339

智能推荐

Linux学习书籍推荐_weixin_30537391的博客-程序员秘密

入门书:《鸟哥的私房菜(基础篇)》《鸟哥的私房菜(服务篇)》《Linux命令行与Shell脚本编程大全(第2版)》《UNIX/Linux 系统管理技术手册》《UNIX编程艺术》计算机及操作系统原理书:《深入理解计算机系统(原书第2版)》《现代操作系统 (原书第3版)》深入理解Linux系统原理篇:《Linux内核设计与实现(原书第3版)》《...

LDAP & X.500_weixin_30955617的博客-程序员秘密

http://baike.baidu.com/view/159263.htmLDAPLDAP的英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,所...

使用Icon图标的几种方式_icon怎么用_前端@小菜的博客-程序员秘密

一.CSS Sprite这也就是我们平时所说的雪碧图(也叫精灵图),主要通过background-position属性来控制图片显示的位置,不过要注意的是图片是以左上角为坐标原点,坐标的变动应在第四象限内,及x的取值为0到正无穷,y的取值为负无穷到0.二.使用font icon首先我们要下载font字体文件,推荐网站:https://www.iconfont.cn/选择icon后添...

java基础-常用类(API)_u013286473的博客-程序员秘密

Java常用类(API)  石凤贵【知识点】理解Java API的概念,了解Object类,基本类型的封装类,熟悉String类和StringBuffer类,Hashtable与Properties类,System类与Runtime类,Date类、Calendar类、Math类、BigInteger类,Math与Random类。提示:查阅JDK API【内容】一、O...

PAT-A1010解题报告_info_H的博客-程序员秘密

PAT-A1010解题报告第一遍做这道题时就有了很朴素的想法,先把已知进制的数转换成10进制,再对未知进制进行二分。但是提交后发现很多测试点没有通过,仔细看了《算法笔记》后才发现有很多细节没有把握好,在这里就记录下我的解题过程,为后来者填坑。思路题目要求找一个未知进制,满足N1=N2N_1=N_2N1​=N2​,只需把二者都转换成10进制进行比较。假设N2N_2N2​的进制未知,能够很容易地推出,N2N_2N2​的大小随着进制的增加而增加,这样我们就能二分处理N2N_2N2​的进制,找到一个使等式成

随便推点

C语言实现五子棋_include game.h_MineYuer的博客-程序员秘密

C语言实现五子棋首先项目的目录结构是这样的函数声明在头文件里,函数实现在game.c中,测试和主函数写在test.c中。整个代码是以TDD模式写下来的,先写测试函数,再反过头去实现具体的函数。代码流程 用户输入,选择游戏难度,此处使用了枚举常量PLAY1和PLAY2与SWitch语句进行搭配使用,可以让代码清晰明了。 进入游戏的流程是根据用户输入的难度选择

Effective Exception Handling in Visual C++_qyfcool的博客-程序员秘密

Effective Exception Handling in Visual C++在C++中进行有效的异常处理 出自CodeProject,原文链接:http://www.codeproject.com/Articles/207464/Exception-Handling-in-Visual-Cplusplus 译:[email protected]

使用ssm框架编写简单图书管理系统(二)_Xingyizhou的博客-程序员秘密

项目中用到了分页 然后我使用的是mybatis的插件pagehelper官网地址:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md需要导入jar包坐标地址: &lt;!--分页插件--&gt;&lt;!-- https://mvnrepository.co...

Android 开发之手把手教你写 ButterKnife 框架(三)_Chiclaim的博客-程序员秘密

一、概述上一篇博客讲了,如何在android studio使用apt 《 Android开发之手把手教你写ButterKnife框架(二)》然后在Processor里生成自己的代码,把要输出的类,通过StringBuilder拼接字符串,然后输出。 try { // write the file JavaFileObject source = processingEnv.get

如何设计 QQ、微信等第三方账号登陆 ?(附数据库结构)_普通网友的博客-程序员秘密

这里的多账户区别于系统级别的,我们讲的多账户系统是指,在我们互联网应用当中,我们的应用会使用多个第三方账号进行登录,比如现在常用的APP:网易、微信、QQ等等。内容通过这一篇文章:可以学到:多用户下面的技术方案细节,以及相应的表设计,流程设计。不可以学到:与其他文章一样,我这里不会有具体代码实现细节,方案做的对,代码咋写都不会太烂。架构演进创业初期归结为创业初期是因为这个时候用户量比较少,...

matlab人工选择阈值进行分割,基于MATLAB的图像阈值分割算法的研究_涂山鹿的博客-程序员秘密

[摘要]:图像分割是一种重要的数字图像处理技术。本文首先介绍了图像分割技术,其次总结了目前图像分割技术中所用到的阈值、边缘检测、区域提取等方法以及分水岭算法。针对各种阈值分割算法,本文在最后做了详细的研究,并给出了相应的MATLAB程序源代码。[关键词]:数字图像处理;图像分割;阈值;算法ResearchonlgorithmAbstract:ImageInthisthesis,thedigi...

推荐文章

热门文章

相关标签