一道关于小鸟的算法题
来源:互联网 发布:市政工程软件 编辑:程序博客网 时间:2024/05/21 04:00
今天公司的测试同学进行编程考试,受人之托帮忙写一个算法,感觉挺有意思。
有1对麻雀,从出生后第3个月起每个月都生1对麻雀,小麻雀长到第4个月后每个月又生1对麻雀,假如麻雀的寿命只有3年,并且在第三年不能生育,问从现在开始:每月麻雀总数是多少?
public class BirdCaculator { static final int DEFAULT_MONTH = 41; //总量数组 以月份个数为索引 int[] birdArray ; //不能生育量数组 以月份个数为索引 int[] birdsCantBirth; //死亡数量数组 以月份个数为索引 int[] diedArray ; public static void main(String[] args) { BirdCaculator caculator = new BirdCaculator(); caculator.caculate(DEFAULT_MONTH); caculator.print(DEFAULT_MONTH); } public void caculate(int monthNumber) { birdArray = new int[monthNumber]; birdsCantBirth = new int[monthNumber]; diedArray = new int[monthNumber]; getFibonacciArray(monthNumber); } public void print(int monthNumber) { for (int i = 0; i < monthNumber; i++) { System.out.println("第" + (i + 1) + "月 :"); System.out.println("小鸟数量:" + (birdArray[i] - diedArray[i] - birdsCantBirth[i]) + (diedArray[i]!=0? "\n死亡数量:" + diedArray[i]:"" ) + (birdsCantBirth[i]!=0?"\n不生数量" + birdsCantBirth[i]:"")); System.out.println(); } } public void getFibonacciArray(int endMonth) { birdArray[0] = 2;//第一个月两个小麻雀 birdArray[1] = 2;//第二个月两个小麻雀 birdArray[2] = 2;//第三个月两个小麻雀 for (int i = 3; i < endMonth; i += 1) { birdArray[i] = birdArray[i - 1] + birdArray[i - 3]; //今天死的量 getDiedBirds(i); //三天前不能生育的量 getBirdNotBirth(i-3); } } public void getDiedBirds( int endMonth) { if (endMonth < 3 * 12) { diedArray[endMonth] = 0; } else { diedArray[endMonth] = birdArray[endMonth - 3 * 12]; } } public void getBirdNotBirth( int endMonth) { if (endMonth < 2 * 12) { birdsCantBirth[endMonth] = 0; } else { birdsCantBirth[endMonth] = birdArray[endMonth - 2 * 12] - diedArray[endMonth - 2 * 12]; } }}
- 一道关于小鸟的算法题
- 一道关于拆分思路的算法题
- 一道关于排序的算法题
- 一道关于股票买卖的算法编程题
- 月初新浪的一道关于算法的笔试题
- 一道关于放鸡蛋的算法
- 关于数据库的一道题??
- 一道关于信号的题
- 关于继承的一道题
- 关于 static 的一道题
- 关于一道题的思考
- 关于C++的一道题
- 关于jvm的一道题
- 一道关于信号的题
- 关于蓝桥杯的一道题
- 关于textarea的一道题
- 一道算法题的数学分析
- 一道有趣的算法题
- s1sh和s2ssh在集成时,tomcat 一启动就报错……解决!
- 用C#打造自己的通用数据访问类库(续)
- 野指针<转>
- Marquee详解
- Problem 10 2000000以下素数和
- 一道关于小鸟的算法题
- hdu 1753 a+b Java Decimal类
- 基于嵌入式Linux的视频采集系统9----基于JRTPLIB的视频数据接收模块实现
- 中国人为何生活得像驴子?
- HDU 2095 Find your present (2) (位异或)
- oracle with语句详解
- 基于嵌入式Linux的视频采集系统10----实时视频显示模块
- c++笔记 降低头文件间的编译依存关系
- 转发和重定向的区别