标题: [数值计算] 求规定范围的随机数所有排序 [打印本页]
作者: zhouyongjun 时间: 2008-11-4 17:12 标题: 求规定范围的随机数所有排序
请求各位高手帮忙!
下面是代码的一段:
@echo off&setlocal ENABLEDELAYEDEXPANSION
set /a n=8
:random
set /a "a=%random%%%%n%+1"
if defined #%a% goto random
set /a "#%a%=%a%"
set "var=%var%!#%a%!"
set /a m+=1
if %m% equ %n% goto a
goto random
:a
...
请问如何反复调用:random ,求出所有的%var% ,也就是排列组合问题,求出所有可能的排序。(如,12345678,12345687,12345876。。。):random 只能产生一组排序,希望能通过他产生n*(n-1)...*2*1 组排序。不产生临时文件最好,谢谢!
[ 本帖最后由 zhouyongjun 于 2008-11-4 17:36 编辑 ]
作者: Batcher 时间: 2008-11-4 17:34
提问的时候最好能够给出具体的例子,比如n=3,结果如何,n=4,结果如何,等等。
而不是只贴一段代码让别人帮你改错,有可能的你的代码思路会把别人带到沟里。又或者别人看了你的代码,思路受到限制,而忽略了更好的方法。
作者: Batcher 时间: 2008-11-4 17:50 标题: 回复 3楼 的帖子
随便定义的变量而已,高兴话,还可以换成其它字符。
作者: wxcute 时间: 2008-11-5 19:44
要用随机的方法列出所有排列几乎是不可能,因为随机数重复太多,特别是当数目大了之后。
变化的个数比较难,下面的也是转来的别人的代码。
如果是固定的数目,如 4 个。方法如下:- @echo off
- setlocal enableDelayedExpansion
- set "sr1=1 2 3 4 "
- for %%a in (!sr1!) do (set sr2=!sr1:%%a =!
- for %%b in (!sr2!) do (set sr3=!sr2:%%b =!
- for %%c in (!sr3!) do (set sr4=!sr3:%%c =!
- echo %%a %%b %%c !sr4!
- ) ) )
- pause
复制代码
作者: Batcher 时间: 2008-11-5 21:46 标题: 回复 6楼 的帖子
除了这个之外,还有一个递归算法,效率要高一些。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |