一头母牛,三年后,这头母牛每年会生出1头母牛, 生出来的母牛三年后,又可以每年生出一头母牛
来源:互联网 发布:python获取时间段数据 编辑:程序博客网 时间:2024/06/11 16:26
该题是蓝桥杯上的一道填空题。应该是为了考察集合的使用吧,代码看上去有些臃肿,不过解题思想很好,就是效率太低了。mark一下。
让我想到了大一时候学习递归时候用的方法,但那时根本没有想过执行效率的问题。
在此我写出四种解法。
至于递归方法,简洁,但效率就低多了去了。
本题不难,只是随便比较一下执行效率,高手请手下留情。
n取32,太大了方法四就堆溢出了,再大就超过int存储长度了。
上代码:
import java.util.ArrayList;import java.util.List;class Cow{static int f[]=new int[1000];//方案一:该年的母牛个数等于 前年的母牛个数(生一个小牛) 加上 去年的母牛个数static int f(int n){return n>2 ? f(n-2)+f(n-1) : 1; }//方案二:打表提高执行效率static int f2(int n){for(int i=1;i<n;i++) g(i);return g(n);}static int g(int n){f[n] = n>2 ? f[n-2]+f[n-1]:1;return f[n];}//方案二:迭代节省空间同时提高执行效率static int f3(int n){int a,b,sum;a=b=sum=1;for(int i=3;i<=n;i++){sum=a+b;a=b;b=sum;}return sum;}//方案四:直接模拟母牛生产过程private int age;public Cow afterYear(){age++;return age > 2 ? new Cow() :null;//填空}public static void f4(int n){List<Cow> list = new ArrayList<Cow>();list.add(new Cow());for (int i = 0; i < n; i++){int cowCount = list.size();for (int j = 0; j < cowCount; j++){Cow cow = list.get(j).afterYear(); if (cow != null){cow.age++;// 填空list.add(cow);}}}System.out.println(list.size());}public static void main(String[] args) throws Exception {long start=System.nanoTime();System.out.print("方案一:");System.out.println(f(32));System.out.println(System.nanoTime()-start);start=System.nanoTime();System.out.print("方案二:");System.out.println(f2(32));System.out.println(System.nanoTime()-start);start=System.nanoTime();System.out.print("方案三:");System.out.println(f3(32));System.out.println(System.nanoTime()-start);start=System.nanoTime();System.out.print("方案四:");f4(32);System.out.println(System.nanoTime()-start); } }//方案一:2178309//10237153//方案二:2178309//59283//方案三:2178309//45040//方案四:2178309//473797733
可以看出方法一直接递归效率是非常慢的,方法二和方法三在同一个数量级。至于方法四,我想说蓝桥杯上的方法也太水了吧。。。整整多了四个数量级。
- 一头母牛,三年后,这头母牛每年会生出1头母牛, 生出来的母牛三年后,又可以每年生出一头母牛
- 基因牛 张教授采用基因干预技术成功培养出一头母牛,三年后,这头母牛每年会生出1头母牛, 生出来的母牛三年后,又可以每年生出一头母牛。
- 一个java面试题:一个农夫养了一头牛,三年后,这头牛每年会生出一头牛,生出来的牛三年后又可以每年生出一头牛,不考虑牛的性别和生死,问农夫10年后有多少头牛?
- 母牛繁殖问题:一头母牛,每年年初生一头小母牛,每头小母牛从第四个年头起,每年年初也要生一头小母牛,问:第20个年头后共有多少只牛?
- 有一头小母牛。从第四年起每年生一头小母牛。生的小母牛也是从第四年起每年生一头小母牛。如此循环。编程求N年后有多少头母牛。。。。。。。
- 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛...
- 牛生牛的问题,假如生出来的都是母牛
- 若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第n年时有多少头母牛?
- 若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第n年有多少头母牛?
- 面向对象设计题:“农场一头小母牛,每年生头小母牛。。。”的一种实现
- 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n
- 一个农场有头母牛,现在母牛才一岁,要到四岁才能生小牛,四岁之后,每年生一头小牛,n年后有多少头小牛
- 程序设计题:农场一头小母牛_每年生头小母牛_面对象!
- java 解决母牛生牛问题 2种方法 2头母牛,3岁后每年生1头,9岁直接不生 15岁直接死亡
- 农场有头大母牛,每年生头小母牛,小母牛五年后生小母牛,问20年后农场一共有多少头牛?(用面向对象的思想)
- 农场有头大母牛,每年生头小母牛,小母牛五年后生小母牛,问20年后农场一共有多少头牛?(用面向对象的思想)
- 农场一头小母牛,每年生头小母牛,母牛5岁产母牛,20年上多少牛?--java面向对象方式实现
- 设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛?
- Activity之间的叠加
- springMVC对ibatis,hibernate,aop,缓存等的配置
- mysql查询一天,查询一周,查询一个月的数据
- Axis2开发webservice总结
- IOS Push 证书的重新生成
- 一头母牛,三年后,这头母牛每年会生出1头母牛, 生出来的母牛三年后,又可以每年生出一头母牛
- 22
- ListView 优化
- 全国计算机技术与软件专业技术资格(水平)考试,高级的三科分别考什么内容?
- java 反射 基本知识——构造器
- JDK 7 中的 Fork/Join 模式
- Js中的window.parent ,window.top,window.self 详解
- 有关静态lib编译的注意点
- SMRAM