标题: [批处理练习]算一算三年内你能养多少兔子? [打印本页]
作者: mxxcgzxxx 时间: 2011-6-3 23:43 标题: [批处理练习]算一算三年内你能养多少兔子?
本帖最后由 mxxcgzxxx 于 2011-6-7 13:05 编辑
800年前,意大利的数学家斐波纳契出版了惊世之作《算盘书》。在《算盘书》里,他提出了著名的“兔子问题”:假定一对兔子每个月可以生一对兔子,而这对新兔子在出生后第二个月就开始生另外一对兔子,这些兔子不会死去,那么一对兔子一年内能繁殖多少对兔子?
答案是一组非常特殊的数字:1,1,2,3,5,8,13,21,34,55,89……不难发现,从第三个数起,每个数都是前两数之和,这个数列则称为“斐波纳契数列”,其中每个数字都是“斐波纳契数”。
求解:批处理采用不同的思路算出3年以后的兔子数!
老手可以思考下超过3年9个月怎么办,能正确输出5年后的数据吗?
作者: batman 时间: 2011-6-4 02:34
此题不难,在cn-dos做新手的时候就做过。。。
贴子是不是发错版块了。。。
作者: wc726842270 时间: 2011-6-4 08:59
有些不太明白,为什么不发到练习区里,那里关注的人相对来说还是比这儿多的
作者: mxxcgzxxx 时间: 2011-6-4 09:39
我发不进去没权限
作者: mxxcgzxxx 时间: 2011-6-7 12:05
本题算法是很简单的,主要是超过一定的序列后会生成大数是CMD不接受的,要正确输出就需要处理了
作者: CrLf 时间: 2011-6-7 12:30
本帖最后由 zm900612 于 2011-6-7 13:18 编辑
算是很容易,不过超过上限怎么办- @echo off&setlocal enabledelayedexpansion
- set /a l=3*12
- set tmp=0 1
- for /l %%a in (-%l%) do (
- for /f "tokens=1,2" %%b in ("!tmp!") do set /a tmp=%%a+%%b
- set tmp=%%b !tmp!
- )
- echo %tmp%
- pause
复制代码
前头绕弯了,这样更好:- @echo off&setlocal enabledelayedexpansion
- set /a l=3*12,a=0,b=1
- for /l %%a in (-%l%) do (
- set /a "b=a+(a=!b!)"
- )
- echo %b%
- pause
复制代码
作者: mxxcgzxxx 时间: 2011-6-7 12:40
本帖最后由 mxxcgzxxx 于 2011-6-7 12:43 编辑
6# zm900612
1\出错:找不到文件%b
2\-1869596475
set /a 计算超过32位的数会变成负数进行循环计算不会显示出错信息
作者: CrLf 时间: 2011-6-7 12:57
已修改
大数计算用纯批来做很勉强,虽然加法是其中最简单的...
作者: mxxcgzxxx 时间: 2011-6-7 13:03
本帖最后由 mxxcgzxxx 于 2011-6-7 13:40 编辑
- @echo off&setlocal enabledelayedexpansion
- set /a a=0,b=1,c=0
- for /l %%1 in (0,1,2) do (
- for /l %%i in (1,1,12) do set /a "c=(b=a+(a=!b!))*2"
- )
- echo 3年后你有%b%对兔子,其中%a%对为成年兔,共%c%只兔子!
- echo PS:如果中途你不吃或病死的话!
- pause>nul
复制代码
嗯,只能算到45个月是正常的,也就是3年9个月
给新人做题那我就改成3年吧
这题关键 的地方是初始的两个数 1 和另一个隐数 0
作者: CrLf 时间: 2011-6-7 13:29
本帖最后由 zm900612 于 2011-6-7 13:55 编辑
大数应该都是这样算的吧:- @echo off&setlocal enabledelayedexpansion
- set a=1023423423324
- set b=1231232
- for %%a in ("a1=!a:~-9!" "a2=!a:~0,-9!" "b1=!b:~-9!" "b2=!b:~0,-9!") do (
- for /f "tokens=1* delims==0" %%b in (%%a) do set /a "%%b=%%c-0"
- )
- set /a "n=a1+b1","m=a2+b2+m%%1000000000"
- echo %a1% %a2% %b1% %b2% %m% %n%
- for /f "tokens=* delims=0" %%a in ("0!m!!n!") do echo %a%+%b%=%%a
- pause
复制代码
笔算的办法...
作者: common 时间: 2011-6-7 22:42
为什么我按题中给出的:“斐波纳契数列”,方法,用最笨的方式,算出来答案与各位的答案都不一样:- @echo off&setlocal enabledelayedexpansion
- set /a b12=1+1+2+3+5+8+13+21+34+55+89+(55+89)
- echo 1年后你有%b12%对兔子
- pause>nul
-
- set /a b13=89+(55+89)
- set /a b14=(55+89)+!b13!
- set /a b15= !b13!+!b14!
- set /a b16=!b14!+!b15!
- set /a b17=!b16!+!b15!
- set /a b18=!b16!+!b17!
- set /a b19=!b18!+!b17!
- set /a b20=!b18!+!b19!
- set /a b21=!b119!+!b20!
- set /a b22=!b20!+!b21!
- echo 两年后你有!b22!对兔子
- pause
-
- set /a b23=!b21!+!b22!
- set /a b24=!b22!+!b23!
- set /a b25=!b24!+!b23!
- set /a b26=!b24!+!b25!
- set /a b27=!b25!+!b26!
- set /a b28=!b26!+!b27!
- set /a b29=!b28!+!b27!
- set /a b30=!b28!+!b29!
- set /a b31=!b29!+!b30!
- set /a b32=!b30!+!b31!
- set /a b33=!b31!+!b32!
- set /a b34=!b32!+!b33!
- set /a b35=!b33!+!b34!
- set /a b36=!b34!+!b35!
- echo 两年后你有!b36!对兔子
- pause
复制代码
作者: mxxcgzxxx 时间: 2011-6-7 22:46
11# common
第14句 b19写成b119了!:(
另外你没有进入语块不用!!开变量延时。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |