技术标签: 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年的相加
}
这个思路更高大上一些,感觉我的思路像小孩
一、原理二、实现流程三、结论
入门书:《鸟哥的私房菜(基础篇)》《鸟哥的私房菜(服务篇)》《Linux命令行与Shell脚本编程大全(第2版)》《UNIX/Linux 系统管理技术手册》《UNIX编程艺术》计算机及操作系统原理书:《深入理解计算机系统(原书第2版)》《现代操作系统 (原书第3版)》深入理解Linux系统原理篇:《Linux内核设计与实现(原书第3版)》《...
http://baike.baidu.com/view/159263.htmLDAPLDAP的英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,所...
一.CSS Sprite这也就是我们平时所说的雪碧图(也叫精灵图),主要通过background-position属性来控制图片显示的位置,不过要注意的是图片是以左上角为坐标原点,坐标的变动应在第四象限内,及x的取值为0到正无穷,y的取值为负无穷到0.二.使用font icon首先我们要下载font字体文件,推荐网站:https://www.iconfont.cn/选择icon后添...
Java常用类(API) 石凤贵【知识点】理解Java API的概念,了解Object类,基本类型的封装类,熟悉String类和StringBuffer类,Hashtable与Properties类,System类与Runtime类,Date类、Calendar类、Math类、BigInteger类,Math与Random类。提示:查阅JDK API【内容】一、O...
PAT-A1010解题报告第一遍做这道题时就有了很朴素的想法,先把已知进制的数转换成10进制,再对未知进制进行二分。但是提交后发现很多测试点没有通过,仔细看了《算法笔记》后才发现有很多细节没有把握好,在这里就记录下我的解题过程,为后来者填坑。思路题目要求找一个未知进制,满足N1=N2N_1=N_2N1=N2,只需把二者都转换成10进制进行比较。假设N2N_2N2的进制未知,能够很容易地推出,N2N_2N2的大小随着进制的增加而增加,这样我们就能二分处理N2N_2N2的进制,找到一个使等式成
C语言实现五子棋首先项目的目录结构是这样的函数声明在头文件里,函数实现在game.c中,测试和主函数写在test.c中。整个代码是以TDD模式写下来的,先写测试函数,再反过头去实现具体的函数。代码流程 用户输入,选择游戏难度,此处使用了枚举常量PLAY1和PLAY2与SWitch语句进行搭配使用,可以让代码清晰明了。 进入游戏的流程是根据用户输入的难度选择
Effective Exception Handling in Visual C++在C++中进行有效的异常处理 出自CodeProject,原文链接:http://www.codeproject.com/Articles/207464/Exception-Handling-in-Visual-Cplusplus 译:[email protected]
项目中用到了分页 然后我使用的是mybatis的插件pagehelper官网地址:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md需要导入jar包坐标地址: <!--分页插件--><!-- https://mvnrepository.co...
一、概述上一篇博客讲了,如何在android studio使用apt 《 Android开发之手把手教你写ButterKnife框架(二)》然后在Processor里生成自己的代码,把要输出的类,通过StringBuilder拼接字符串,然后输出。 try { // write the file JavaFileObject source = processingEnv.get
这里的多账户区别于系统级别的,我们讲的多账户系统是指,在我们互联网应用当中,我们的应用会使用多个第三方账号进行登录,比如现在常用的APP:网易、微信、QQ等等。内容通过这一篇文章:可以学到:多用户下面的技术方案细节,以及相应的表设计,流程设计。不可以学到:与其他文章一样,我这里不会有具体代码实现细节,方案做的对,代码咋写都不会太烂。架构演进创业初期归结为创业初期是因为这个时候用户量比较少,...
[摘要]:图像分割是一种重要的数字图像处理技术。本文首先介绍了图像分割技术,其次总结了目前图像分割技术中所用到的阈值、边缘检测、区域提取等方法以及分水岭算法。针对各种阈值分割算法,本文在最后做了详细的研究,并给出了相应的MATLAB程序源代码。[关键词]:数字图像处理;图像分割;阈值;算法ResearchonlgorithmAbstract:ImageInthisthesis,thedigi...