[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
http://www.cn-dos.net/forum/viewthread.php?tid=45488

看后面有一楼我转载的,是我见到最短的算24点,包括计算中出现无理数的。
那个递归绝了。


呜呜…… 就那个式子类型都……
哎,别人那个代码比我的短很多,我也就没改了



回复:【精品】我也来写批处理 ...  
@echo off
setlocal enableextensions enabledelayedexpansion
title 作者:liuzhaonan11
echo 批处理算24点&echo.
:loop
set /p "n=输入四个数用空格分开: "
set /a "lzn=0"
for %%i in (!n!) do set /a "lzn+=1"&set /a "lz!lzn!z=%%i,lz!lzn!m=1,lz!lzn!s=%%i"
call:liuzhaonan11 lz
if not errorlevel 1 echo 结果: 没有答案
goto loop
原理说明:使用有理数进行计算,选择算式中最先结合的两数和它们之间的运算,并递归.
:liuzhaonan11
setlocal
set "f1=+"&set "f2=-"&set "f3=*"&set "f4=/"
for /l %%i in (1,1,!%1n!) do for /l %%j in (1,1,!%1n!) do if %%i neq %%j (
for /l %%k in (1,1,4) do (
setlocal
if %%k leq 2 set /a "z=%1%%jz*%1%%im!f%%k!%1%%jm*%1%%iz,m=%1%%jm*%1%%im"
if %%k equ 3 set /a "z=%1%%jz*%1%%iz,m=%1%%jm*%1%%im"
if %%k equ 4 set /a "z=%1%%jz*%1%%im,m=%1%%jm*%1%%iz"
if !%1n! equ 2 (
set /a "t=!z!-24*!m!"
if !t! equ 0 if !m! neq 0 echo 结果: !%1%%js! !f%%k! !%1%%is! = 24&exit /b 1
) else (
set "s=(!%1%%js! !f%%k! !%1%%is!)"&set /a "n=0"
for /l %%l in (1,1,!%1n!) do if %%l neq %%i if %%l neq %%j (
set /a "n+=1"&set "%1!n!z=!%1%%lz!"&set "%1!n!m=!%1%%lm!"&set "%1!n!s=!%1%%ls!"
)
set /a "n+=1"&set "%1!n!z=!z!"&set "%1!n!m=!m!"&set "%1!n!s=!s!"
set "%1n=!n!"&call%0 %1
if errorlevel 1 exit /b 1
)
endlocal
)
)
exit /b 0  

  
作者:liuzhaonan11    2009-1-11 17:17  



看了这个比我的短了很多,我就决定不再用批处理做了,因为我写不出更简洁的思路了。
^_^ 其中处理过程中出现无理数的方式,是模拟了分数的计算方式~


而我的那个思路是利用对数字递归排列组合再处理的,绕了弯路,只好佩服liuzhaonan11
不过他说很基础,课程上有教~ =。=  我跟专业的比还差远喽。

[ 本帖最后由 523066680 于 2009-11-19 15:12 编辑 ]

TOP

返回列表