Board logo

标题: [数值计算] 批处理如何实现农夫养牛的经典面试题? [打印本页]

作者: BatCoder    时间: 2009-10-31 21:00     标题: 批处理如何实现农夫养牛的经典面试题?

一个农夫养了一头牛,三年后,这头牛每年会生出1头牛,生出来的牛三年后,又可以每年生出一头牛……
问农夫10年后有多少头牛?n后年呢?
作者: zqz0012005    时间: 2009-10-31 21:00

斐波那契数列
f(n) = f(n - 1) + f(n - 2)
第n年的牛为去年牛的个数f(n - 1)加上今年出生的牛的个数,而今年出生的牛的个数为前年牛的个数即f(n - 2),因为前年的牛今年至少3岁,都可以生。

递归比较容易。

从农夫养牛问题推广到斐波那契数列
http://www.cnblogs.com/chinese-z ... /10/31/1593586.html
作者: Seter    时间: 2009-10-31 21:43

  1. @echo off&setlocal enabledelayedexpansion
  2. set a=1
  3. set b=0
  4. set c=0
  5. set d=0
  6. set/pn=
  7. for /l %%i in (1,1,%n%) do (
  8. set/ad+=c
  9. set e=!d!
  10. set c=!b!
  11. set b=!a!
  12. set a=!e!
  13. )
  14. set/as=a+b+c+d
  15. echo %s%
  16. pause
复制代码
土办法
作者: zhouyongjun    时间: 2009-10-31 22:14

等比数列嘛
  1. @echo off
  2. set/p year=你要知道几年后牛的数目?:
  3. set/a n=year/3-1,s=2^<^<n
  4. if %s% equ 0 set/a s=1
  5. echo %year%年后农夫有%s%条牛
  6. pause>nul
复制代码
不能超过set/a的运算范围,即结果小于2的31次方
作者: batman    时间: 2009-10-31 22:53

看错题意,编辑掉。。。

[ 本帖最后由 batman 于 2009-10-31 23:40 编辑 ]
作者: zqz0012005    时间: 2009-10-31 23:02

简单的等比数列问题,给这么高的悬赏分?
2楼正解,等楼主送分吧,我就不加了。

大家对批处理的讨论越来越偏离正道了。。。
作者: zljzsmzzx    时间: 2009-11-1 12:07

2楼是正解吗?有把“三年后,这头牛每年会生出1头牛”的“三年后”考虑进去了吗?
作者: zqz0012005    时间: 2009-11-1 12:46

的确疏忽了,“三年后,这头牛每年会生出1头牛”,是每年,不再是每三年。
作者: zqz0012005    时间: 2009-11-1 13:55

转一个非递归算法:
  1. @echo off
  2. set /a n=10
  3. rem set /p n=多少后年:
  4. set /a age1=1, age2=0, age3=0
  5. for /l %%a in (1 1 %n%) do (
  6.     set /a temp=age3, age3+=age2, age2=age1, age1=temp
  7. )
  8. set /a count=age1+age2+age3
  9. echo %n%年后牛有%count%
  10. pause&exit/b
复制代码
经典的农夫养牛问题(常考的面试题)
http://topic.csdn.net/u/20091001 ... F-97C524DAE3C4.html
作者: zhouyongjun    时间: 2009-11-1 14:10

呵呵,确实看错题意




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2