本帖最后由 李慧声 于 2013-4-14 11:06 编辑
想想也就是在强调算法,这是我的算法,用递归做的,是通过画图,一个一个写出出生的牛,然后获得第几天有多少牛,然后在总结规律得出的,比较笨。
分析过程:Axx带表对Ax的第几个孩子.- /**
- * 一个农夫养了一头牛,三年后,这头牛每一年会生出1头牛,生出来的牛三年后,又可以每年生出一头牛……
- * 问农夫10年后有多少头牛?n年呢?(不考虑其他因素,只考虑此数学问题)
- * @author Lihsh-PC
- *
- */
- public class Test {
- /**
- * @param args
- */
- public static void main(String[] args) {
- //十年后实际上是第十一年
- //n年后也就是第n+1年
- System.out.println("你想知道n年后有多少头牛,那请先输入n吧:");
- Scanner scanner = new Scanner(System.in);
- int years = scanner.nextInt();
- System.out.println(years + "年后有"+ getSum(years + 1) +"头牛");
- }
- /**
- * 由题目可以知道:对于每一头牛单独而言,增长规律是1、2、3、4、5,6从第三项开始是一个等差数列 (可以看出从第四天看是,该天的牛数为第三天,第二天,第一天的牛之和)
- * 从第四天开始出生的牛又要重复上述的等差数列 0、0、0、1、2、3、4(已在第一头牛中计算了father)(和上面是一样的道理)
- * 第五天出生的牛。。 0、0、0、1、2、3、4()(已在第一头牛中计算了father)(和上面是一样的道理)
- * -----------------------------------------------------------
- * 1、1、1、2、3、4、6、9....
- * 其实也就是兔子(斐波纳契数列)出生的问题的变种,最后我们得出的结论就是第n(n>4)天的牛数量是第(n-2)天,第(n-3)天,第(n-4)天的牛数量之和
- * 即f(n)=f(n-2)+f(n-3)+f(n-4)(n > 4)
- * f(1)=1
- * f(2)=1
- * f(3)=1
- * 或者f(n)=1 n<4
- * f(4) = 2
- * 由上面的分析可以看出,是一个递归的问题
- * @param years 多少年后
- */
- public static int getSum(int years){
- if(years == 0)
- return 0;
- else if(years >= 1 && years <= 3)
- return 1;
- else if(years > 3)
- return getSum(years -2) + getSum(years -3) + getSum(years -4);
- else
- System.out.println("输入有误,请重新输入!");
- return years;
- }
- }
复制代码 |
|