[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
3# wankoilz


set还能排序哦?

TOP

2# zm900612


这个位运算看着不是一般的迷糊,憨豆先生能不能解释一下啊?

TOP

楼上能不能说说你那set/a的奥妙,看起来有点神奇!

TOP

换一种更通俗的:
  1. @echo off&setlocal enabledelayedexpansion
  2. set str=123,435,4,43,325,54,234,65,632,45,4342,4265,44,5464
  3. set max=0
  4. for %%a in (%str%) do (
  5.    if %%~a gtr !max! set max=%%~a
  6. )
  7. echo 最大值:!max!
  8. set min=!max!
  9. for %%a in (%str%) do (
  10.    if %%~a lss !min! set min=%%~a
  11. )
  12. echo 最小值:!min!
  13. pause
复制代码

TOP

思路是,在每个数字用#补足8位,将其定义成变量,利用set自动将其排序,最小的排第一。最后用for取第一个就是了

TOP

有更好的算法:
  1. @echo off&setlocal enabledelayedexpansion
  2. set str=123,435,4,43,325,54,234,65,632,45,4342,4265,44,5464
  3. for %%a in (%str%) do (
  4. set /a "n+=^!((%%~a-n)>>31)*(%%~a-n)"
  5. )
  6. echo 最大值:!n!
  7. for %%a in (%str%) do (
  8. set /a "n-=^!((n-%%~a)>>31)*(n-%%~a)"
  9. )
  10. echo 最小值:!n!
  11. pause
复制代码
1

评分人数

    • abcdshenji: 琢磨了半小时终于明白了技术 + 1

TOP

返回列表