(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

智能推荐

IOS中定时器NSTimer的开启与关闭_xcode timer定时器怎样停止_宋奇山的博客-程序员秘密

调用一次计时器方法:[cpp] view plaincopymyTimer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(scrollTimer) userInfo:nil repeats:NO];  //不重复,只调用一次。tim

linux服务器命令行安装MATLAB2018b(非root用户)_DreamingSnail的博客-程序员秘密

下载和解压下载matlab2018b for linux的iso文件,root用户可以直接挂载查看iso文件,非root用户不能挂载,这里采用7z软件linux版解压,可以直接解压iso文件下载地址:http://sourceforge.net/projects/p7zip/files/p7zip/tar -jxvf p7zip*.tar.bz2安装README说明mv makefil...

从零认识单片机(10)_weixin_30608131的博客-程序员秘密

使用单片机的流程:1、程序开发过程:源代码编写——编译生成可执行程序——烧录2、单片机工作流程:单片机上电——时钟模块起振,cpu有了时钟节拍,单片机内部各模块开始工作——cpu从ROM中逐条读取可执行程序来执行,RAM存储变量配合程序执行,直到关机3、调试程序典型的单片机都是12T,12T(51单片机内部会对外部时钟进行分频再给cpu,内部cpu主频是12MHZ;1T单片机...

SpringDataJPA学习笔记_qq_1003669233的博客-程序员秘密

SpringDataJPA(一)简介Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套 JPA 应用框架,可使开发者用极简的代码就可以实现对数据库的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用Spring Data JPA 可以极大提高开发效率!它是把JPA又封装了一遍,我们的 dao层中只需要写接口,就自动具有了...

JS移动DOM节点,将某节点下所有子节点移动(剪切)到另一个节点下。新手很容易踩的坑!_Lanerxx的博客-程序员秘密

JS移动DOM节点,将某节点下所有子节点移动(剪切)到另一个节点下。新手很容易踩的坑!题目(新手练习题)BUG第一种错误第二种错误解决方案第一种解决方案(无循环)第二种解决方案第三种解决方案(推荐)总结重点:移动完一个非尾部节点之后,后面的节点会依次部位上来,并且节点数据的长度会实时变化!!题目(新手练习题)将上方绿色实线框中的两个列表移动(剪切)到下方绿色虚线框中。ps:1、绿色实线框被一个div包裹,绿色虚线框被一个div包裹;2、绿色实线框中的子节点有两个,分别是圆点样式的列表和圆圈样式的

matlab pca svd,关于使用SVD进行PCA主成分提取的代码问题!也是必须涉及到原理的!..._零跑汽车的博客-程序员秘密

如标题所示,目的是将矩阵进行PCA分析最终得到降维后的新主成分,对于特征值特征向量的提取方法是通过svd。代码和函数名称定义如下/如图所示function [Xm,U,L]=pca(X,K);% Usage: [Xm,U,L] = pca(X,K)% Inputs:% X[M x N]Compound data matrix.% K1x1Number of eigenval...

随便推点

ng不是内部或外部命令_ng不是内部或外部的命令_LM-mint的博客-程序员秘密

Angular运行时报错:ng 不是内部或外部命令一、运行命令ng -v时报错,添加环境变量此电脑-属性-高级系统设置-环境变量-Path添加:node_global二、运行命令ng -serve时报错,添加环境变量此电脑-属性-高级系统设置-环境变量-Path添加:node-cache...

vue-router history模式下 nginx配置_路由history 后端nginx改动_黑洞守门员的博客-程序员秘密

背景首先我们的前端是分成了 pc端 和 移动端 两部分,并非一个整体项目,但是目前网站域名只有一个,即 www.xxx.com其次 pc端 项目是多页面项目,而移动端项目是基于 vue 的 SPA,所以 pc端 和 移动端的访问路径是不一样的最后移动端的路由由 hash模式 更改为 history模式,此模式需要后端 nginx 支持需求当用户对网站进行访问的时候,动态读取客户端是pc...

python-Queue(队列)(过于复杂)_python 复杂的队列交互_xiabe的博客-程序员秘密

简述队列模块实现多生产者、多消费者队列。当信息必须在多个线程之间安全地交换时,它在线程编程中特别有用。此模块中的Queue类实现所有必需的锁定语义。这取决于Python中线程支持的可用性;参见线程模块。模块实现了三种类型的队列,它们只是在检索条目的顺序上有所不同。在FIFO队列中,第一个添加的任务是第一个检索到的任务。在后进先出队列中,最近添加的条目是第一个检索到的条目(像堆栈一样操作)。使用...

<include />实现标题栏复用_我听得到的博客-程序员秘密

标题栏布局:中间的TextView为主标题,左右各有TextView和ImageView,可见度为gone,使用时在代码中控制可见。部分属性封装在自定义style中。<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"

豆豆的三进制计算机_山清水秀iOS的博客-程序员秘密

豆豆的三进制计算机时间限制: 1 Sec内存限制: 128 MB题目描述豆豆最近思考计算机为什么要使用二进制的时候,突然想到为什么不使用三进制呢。三进制明显更适合人类思维。毕竟三进制可以表示事物的三种状态(真,假,未知)三进制是以3为基数的进制。和二进制一样,三进制的数位,称为三进制位(trit),通常,三进制中使用0、1、2三个数字。n!末尾有多少个0这样的问题对于豆豆来说是...

C语言-进程控制编程_c的进程休眠状态变为运行_Silence_Fall的博客-程序员秘密

1.进程的定义标准定义:进程是可并发执行的程序,是在一个数据集合上的运行过程。 通俗来说,硬盘上的一个可执行文件经常被称为程序,在Linux系统中,当一个程序开始执行后,在开始执行到执行完毕退出这段时间里,它在内存中的部分就被称作一个进程。2.进程的分类进程一般分为交互进程、批处理进程和守护进程三类。 守护进程总是活跃的,一般是后台运行。守护进程一般是由系统在开机时通过脚本自动激活启动或超级用户

推荐文章

热门文章

相关标签