[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
大佬写的代码比较紧凑,我习惯把代码”拆开“,便于阅读一些,遇到不明白的,可以 echo ,看看代码到底在做什么
  1. @echo off
  2. setlocal enableextensions enabledelayedexpansion
  3. title 作者:liuzhaonan11
  4. echo 批处理算24点&echo.
  5. :loop
  6. set /p "n=输入四个数用空格分开: "
  7. set /a "lzn=0"
  8. for %%i in (!n!) do (
  9.    set /a "lzn+=1"
  10.    set /a "lz!lzn!z=%%i,lz!lzn!m=1,lz!lzn!s=%%i"
  11. )
  12. call:liuzhaonan11 lz
  13. if not errorlevel 1 echo 结果: 没有答案
  14. goto loop
  15. 原理说明:使用有理数进行计算,选择算式中最先结合的两数和它们之间的运算,并递归.
  16. :liuzhaonan11
  17. setlocal
  18. set "f1=+"
  19. set "f2=-"
  20. set "f3=*"
  21. set "f4=/"
  22. for /l %%i in (1,1,!%1n!) do (
  23. for /l %%j in (1,1,!%1n!) do (
  24. if %%i neq %%j (
  25. for /l %%k in (1,1,4) do (
  26. setlocal
  27. if %%k leq 2 (
  28. set /a "z=%1%%jz*%1%%im!f%%k!%1%%jm*%1%%iz,m=%1%%jm*%1%%im"
  29. )
  30. if %%k equ 3 (
  31. set /a "z=%1%%jz*%1%%iz,m=%1%%jm*%1%%im"
  32. )
  33. if %%k equ 4 (
  34. set /a "z=%1%%jz*%1%%im,m=%1%%jm*%1%%iz"
  35. )
  36. if !%1n! equ 2 (
  37. set /a "t=!z!-24*!m!"
  38. if !t! equ 0 (
  39. if !m! neq 0 (
  40. echo 结果: !%1%%js! !f%%k! !%1%%is! = 24
  41. exit /b 1
  42. )
  43. )
  44. ) else (
  45. set "s=(!%1%%js! !f%%k! !%1%%is!)"
  46. echo 疑问 1 set "s=(!%1%%js! !f%%k! !%1%%is!)"
  47. set /a "n=0"
  48. for /l %%l in (1,1,!%1n!) do (
  49. if %%l neq %%i (
  50. if %%l neq %%j (
  51. set /a "n+=1"
  52. set "%1!n!z=!%1%%lz!"
  53. set "%1!n!m=!%1%%lm!"
  54. set "%1!n!s=!%1%%ls!"
  55. )
  56. )
  57. )
  58. set /a "n+=1"
  59. set "%1!n!z=!z!"
  60. set "%1!n!m=!m!"
  61. set "%1!n!s=!s!"
  62. echo 疑问 2 set "%1!n!s=!s!"
  63. set "%1n=!n!"
  64. call%0 %1
  65. if errorlevel 1 exit /b 1
  66. )
  67. endlocal
  68. )
  69. )
  70. )
  71. )
  72. exit /b 0
复制代码


  1. 批处理算24点
  2. 输入四个数用空格分开: 1 2 3 4
  3. 疑问 1 set "s=(2 + 1)"
  4. 疑问 2 set "lz3s=(2 + 1)"
  5. 疑问 1 set "s=(4 + 3)"
  6. 疑问 2 set "lz2s=(4 + 3)"
  7. 疑问 1 set "s=(4 - 3)"
  8. 疑问 2 set "lz2s=(4 - 3)"
  9. 疑问 1 set "s=(4 * 3)"
  10. 疑问 2 set "lz2s=(4 * 3)"
  11. 疑问 1 set "s=(4 / 3)"
  12. 疑问 2 set "lz2s=(4 / 3)"
  13. 疑问 1 set "s=((2 + 1) + 3)"
  14. 疑问 2 set "lz2s=((2 + 1) + 3)"
  15. 结果: ((2 + 1) + 3) * 4 = 24
复制代码
1

评分人数

    • GNGW: 乐于助人技术 + 1
bat小白,请多指教!谢谢!

TOP

回复 7# GNGW




  1. set n=(2-1)
  2. set /a m=2-%n%
复制代码


如果代码写成这样就明白了吧,之所以有疑问,还是对整体代码不理解,梳理下代码结构更容易阅读、理解。
1

评分人数

    • GNGW: 乐于助人技术 + 1
bat小白,请多指教!谢谢!

TOP

返回列表