Board logo

标题: 批处理算24点 [打印本页]

作者: 523066680    时间: 2009-5-30 17:26     标题: 批处理算24点

http://tieba.baidu.com/f?kz=522864657
10楼
  
作者:liuzhaonan11   

@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  

[ 本帖最后由 523066680 于 2009-5-30 17:27 编辑 ]
作者: PakTC    时间: 2009-6-2 16:46

不会是大家都会了吧……
作者: Batcher    时间: 2009-6-2 20:28     标题: 回复 2楼 的帖子

如果你不会,可以随便问^_^
作者: hchvip    时间: 2009-6-8 20:28

答案似乎不是太好。因为有的有好多算法,不过还是挺感谢的哦
作者: c64kkd    时间: 2010-11-9 21:56

顶一下, 谢谢了!不错!
作者: GNGW    时间: 2024-3-15 17:25

10楼
  
作者:liuzhaonan11   



[ 本帖最后由 523066680 于 2009-5-30 17:27 编辑 ]
523066680 发表于 2009-5-30 17:26



    有个疑问:set /a "lz!lzn!z=%%i,lz!lzn!m=1,lz!lzn!s=%%i",这行代码的作用,我在一个新文件中粘贴了所有代码,将这行代码删除运行,好像没出现什么问题,所以不知道这行代码有什么作用。
作者: 523066680    时间: 2024-3-15 20:45

回复 6# GNGW

    太久没看批处理了,现在看批处理非常的难受。
不打算去梳理整段代码,也不做测试
就大概看:  set /a "lz!lzn!z=%%i,lz!lzn!m=1,lz!lzn!s=%%i" 创建了 lz{编号}z, lz{编号}m, lz{编号}s 几组变量,这句删除后还能正常处理的话,

有可能是后面的代码中
  1. set /a "n+=1"&set "%1!n!z=!z!"&set "%1!n!m=!m!"&set "%1!n!s=!s!"
复制代码
以及类似的几句代码有做了对应的处理。
作者: GNGW    时间: 2024-3-16 15:29

回复 7# 523066680


    您好您好。真没想到原作者会回复我,因为是好久的帖子,也好像看了一眼您最后上线时间好像是08年还是23年,




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