批处理之家's Archiver

523066680 发表于 2009-5-30 17:26

批处理算24点

[url=http://tieba.baidu.com/f?kz=522864657][color=#003366]http://tieba.baidu.com/f?kz=522864657[/color][/url]
10楼
  
作者:liuzhaonan11   

[quote]
@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  

[/quote]

[[i] 本帖最后由 523066680 于 2009-5-30 17:27 编辑 [/i]]

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

[quote]10楼
  
作者:liuzhaonan11   



[ 本帖最后由 523066680 于 2009-5-30 17:27 编辑 ]
[size=2][color=#999999]523066680 发表于 2009-5-30 17:26[/color] [url=http://www.bathome.net/redirect.php?goto=findpost&pid=30365&ptid=4711][img]http://www.bathome.net/images/common/back.gif[/img][/url][/size][/quote]


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

523066680 发表于 2024-3-15 20:45

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=279187&ptid=4711]6#[/url] [i]GNGW[/i] [/b]

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

有可能是后面的代码中[code]set /a "n+=1"&set "%1!n!z=!z!"&set "%1!n!m=!m!"&set "%1!n!s=!s!" [/code]以及类似的几句代码有做了对应的处理。

GNGW 发表于 2024-3-16 15:29

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=279192&ptid=4711]7#[/url] [i]523066680[/i] [/b]


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

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.