读书人

经典-农夫养牛的有关问题

发布时间: 2012-12-20 09:53:21 作者: rapoo

经典-农夫养牛的问题
问题描述:一个农夫养了一头牛,三年后,这头牛每年会生出1头牛,生出来的牛三年后,又可以每年生出一头牛……问农夫10年后有多少头牛?n年呢?(用JAVA实现)。



小弟初次发帖,希望各位前辈别投隐藏,谢谢。 果酱,果酱~


26 楼 snowflate_summer 2011-02-14 dsjt 写道清风_夕瑶 写道这个问题说实在真有点无聊,假设的前提都是生母牛
哈哈!
没公牛再NB的母牛也生不了啊!!


就不允许农场主自己来么? 27 楼 liugaojian13135 2011-02-14 很多方法都能搞定。只是你能不能算出它最后一代是第几代呀。 28 楼 咖啡豆子 2011-02-14 我用的数学归纳法:

理想情况:如果题目是新生牛从第一年开始每年就产出一头牛,那么每年牛的总数就是一个成2倍增长的数列。

实际题目:这里有点小小的区别就是新生的牛要第三年开始才产出,是理想情况下的一个变种。

设第n年牛的总数为S(n), 按理想情况 S(n) = 2×S(n-1), 实际题目中牛要到3岁才生育,所以理想情况会比实际题目中多出一部分,就是理想情况下到第n年前3岁以下的牛多生产出来的那部分,按S(n) = 2×S(n-1)的规律,到第n年前,3岁以下的牛多生产的那部分正好也就是3岁以下的牛自身的数目。只要用理想情况S(n)减去第n年前3岁以下牛的数目。

第n年前不满3岁牛的数目 = S(n-1) - S(n-3)

所以实际情况下 S(n) = 2×S(n-1) - [S(n-1) - S(n-3)] = S(n-1) + S(n-3)

S(1) = 1;
S(2) = 1;
S(3) = 1;
S(4) = 3;
S(5) = 4;
S(6) = 6;
S(7) = 9;
.........

代码的话用递归应该就可以了 29 楼 kingsword588 2011-02-17 这样冒失还要要考虑母牛是否会流产.... 30 楼 sulong 2011-02-17 typhoon466 写道sulong 写道不像是个程序题,倒是一个数学题


老题目了~~以前看到好几次了。

世间万物都是对象,神马都能抽象。
所以,是楼主自己把程序题解得像数学题。

学JAVA的应该多用面向对象思维去抽象,而不是算法,人家和尚就写得不错~

http://never-say-never.iteye.com/blog/851512






不完赞同你的观点。程序,不论是由哪种语言编写的,是面向过程的,还是面向对象的,还是面向规则的,等等,它的意义都在于解决某个问题。比如这题,只关心N年后牛的数量,而不关心计算过程,也不关心是否模拟了牛的繁殖过程,甚至于连是不是牛都不关心,在这种情况下非要模拟牛,以及牛的繁殖过程,那就是为了面向对象而面向对象,并不十分合理。用面向对象,不代表用不着算法,面向对象只是种程序设计理念,但是只要是计算机程序,总会有算法的问题。 31 楼 咖啡豆子 2011-02-22 sulong 写道typhoon466 写道sulong 写道不像是个程序题,倒是一个数学题


老题目了~~以前看到好几次了。

世间万物都是对象,神马都能抽象。
所以,是楼主自己把程序题解得像数学题。

学JAVA的应该多用面向对象思维去抽象,而不是算法,人家和尚就写得不错~

http://never-say-never.iteye.com/blog/851512






不完赞同你的观点。程序,不论是由哪种语言编写的,是面向过程的,还是面向对象的,还是面向规则的,等等,它的意义都在于解决某个问题。比如这题,只关心N年后牛的数量,而不关心计算过程,也不关心是否模拟了牛的繁殖过程,甚至于连是不是牛都不关心,在这种情况下非要模拟牛,以及牛的繁殖过程,那就是为了面向对象而面向对象,并不十分合理。用面向对象,不代表用不着算法,面向对象只是种程序设计理念,但是只要是计算机程序,总会有算法的问题。
同意

读书人网 >编程

热点推荐