Board logo

标题: [求助]如果列举出由随机数字加随机字母组成的4位组合 [打印本页]

作者: flybird2020     时间: 2007-9-20 20:21    标题: [求助]如果列举出由随机数字加随机字母组成的4位组合

一个任意数,由两个数字加两个字母组成
如2r3p
i4e5
q56i
这样的组合如何列举?并保存到一个TXT中做变量
在BBS上搜索了随机关键字
无解。。。
谢谢大大们了
作者: Nickey     时间: 2007-9-20 20:39
@echo off
setlocal enabledelayedexpansion
set str1=abcdefghijklmnopqrstuvwxyz
set str2=0123456789
set /a char1=%random%%%26
set /a num2=%random%%%10
set /a char2=%random%%%26
set /a num2=%random%%%10
echo !str2:~%num1%,1!!str1:~%char1%,1!!str2:~%num2%,1!!str1:~%char2%,1!
pause
作者: flybird2020     时间: 2007-9-20 21:12


  Quote:
Originally posted by Nickey at 2007-9-20 08:39 PM:
@echo off
setlocal enabledelayedexpansion
set str1=abcdefghijklmnopqrstuvwxyz
set str2=0123456789
set /a char1=%random%%%26
set /a num2=%random%%%10
set /a char2=%random%%%26
set /a num2=%ra ...

谢谢大大
假如我想列举可能所有的随机数值到1.TXT的话怎么写呢。。。
作者: flybird2020     时间: 2007-9-20 21:14
可以了,谢谢大大~
作者: dosmania     时间: 2007-9-21 03:39
楼主,你标题是”如何列举出由随机数字加随机字母组成的4位组合“
但是根据你的描述,你是要两个随机数字+两个随机字母(小写),然后再将这四个字符进行随机组合?!是不是这样先?
首先,字母大小写没多大关系的
然后,2楼给的的解决方法不太准确,他怎么就知道获取出来的两个数字和两个字母要怎么组合啊,那是根据他个人主观想法,排列为:
数字+字母+数字+字母
最后,根据你的要求,我给出相应的解决方案:

以下代码没有考虑随机取到的字母或者数字是否重复,其实取到重复是正常的。
@echo off
setlocal EnableDelayedExpansion
set a=abcdefghijklmnopqrstuvwxyz
set b=0123456789
set/a char1=%random%%%26
set/a char2=%random%%%26
set/a num1=%random%%%10
set/a num2=%random%%%10
set "combine=!a:~%char1%,1!!a:~%char2%,1!!b:~%num1%,1!!b:~%num2%,1!"
echo 人为地为四个字符指定一个临时组合是: %combine%
set c=0
:loop
set/a rnd=%random%%%4
if %c% neq 4 (
if not defined kumho%rnd% (
set kumho%rnd%=rnd
set num=%num%%rnd%
set/a c+=1
)
goto loop
)
echo 为临时组合中各个字符随机获取排序位置是: %num%
:: 变量A的值代表临时组合中的第几个字符作为新的随机组合中的第一个字符
:: 变量B的值代表临时组合中的第几个字符作为新的随机组合中的第二个字符
:: 变量C的值代表临时组合中的第几个字符作为新的随机组合中的第三个字符
:: 变量D的值代表临时组合中的第几个字符作为新的随机组合中的第四个字符
set A=%num:~0,1%
set B=%num:~1,1%
set C=%num:~2,1%
set D=%num:~3,1%
echo 真正的随机组合是: !combine:~%A%,1!!combine:~%B%,1!!combine:~%C%,1!!combine:~%D%,1!
pause>nul
如果不想获取的随机字母和数字有重复现象,则修改一下前面部分的代码即可。
@echo off
setlocal EnableDelayedExpansion
set a=abcdefghijklmnopqrstuvwxyz
set b=0123456789
set/a char1=%random%%%26
:repeat1
set/a char2=%random%%%26
if "%char1%"=="%char2%" goto repeat1
set/a num1=%random%%%10
:repeat2
set/a num2=%random%%%10
if "%num1%"=="%num2%" goto repeat2
[ Last edited by dosmania on 2007-9-21 at 04:09 AM ]
作者: wudixin96     时间: 2007-9-21 08:46
5楼说的不错,如果给2楼都能加6分,那么偶给你加9分,o(∩_∩)o...哈哈
作者: flybird2020     时间: 2007-9-21 08:51
谢谢各位大大,收藏代码ING
作者: yovie     时间: 2007-9-21 09:38
原先写过一个大小写字母+数字的生成11位以内的随机组合,你这个和那个同理。
@echo off
setlocal enabledelayedexpansion
set str1=abcdefghijklmnopqrstuvwxyz
set str2=ABCDEFGHIJKLMNOPQRSTUVWXYZ
set str3=0123456789
type nul>dic.txt
set a=
set n=
set /p n=你想要生成多少组数据?
echo 正在生成字典文件,请稍候...
:start
set /a a+=1
:zero
set dic=
set /a rd=%random%%%12
for /l %%i in (1,1,%rd%) do (
call :rdstr
set /a rdn=!random!%%3
call set dic=!dic!%%str:~!rdn!,1%%
)
if "!dic!"=="" goto zero
echo !dic!>>dic.txt
if "%n%"=="%a%" goto ok
goto :start

:ok
echo 创建完成!任意键打开.
pause>nul
notepad dic.txt
endlocal
goto:eof

:rdstr
set /a rd=%random%%%26
set strl=!str1:~%rd%,1!
set /a rd=%random%%%26
set stru=!str2:~%rd%,1!
set /a rd=%random%%%10
set strn=!str3:~%rd%,1!
set str=!strl!!stru!!strn!
goto :eof
[ Last edited by yovie on 2007-9-21 at 09:41 AM ]
作者: dosmania     时间: 2007-9-21 14:30
TO wudixin96:

多谢鼓励,楼主给的分是少了点,没什么诚意啊,哈哈``开玩笑``

To 8 楼:

8 楼的代码跟楼主要求的根本两回事...
而且跟我的方法也不尽相同
”大小写字母+数字的生成11位以内的随机组合“ 这个生成的随机字符个数是无法控制的,当然最多是11个。总之随便看下都知道跟楼主要求的有很大差别。

[ Last edited by dosmania on 2007-9-21 at 02:31 PM ]
作者: wudixin96     时间: 2007-9-21 14:35



作者: npgmis     时间: 2007-9-21 15:15
看来这有太多的高手,加紧学习中。。。
作者: digger     时间: 2007-9-21 23:37
我也来一段代码凑热闹:
@echo off
setlocal enabledelayedexpansion
set str1=0123456789
set str2=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

:loop
for /l %%i in (1,1,2) do (
    set /a rnd1=!random!%%10
    set /a rnd2=!random!%%52
    call set str3=!str3! !random!_%%str1:~!rnd1!,1%%
    call set str4=!str4! !random!_%%str2:~!rnd2!,1%%
)
set num=0
for %%i in (%str3% %str4%) do (
    set /a num+=1
    set var_%%i_!num!=%%i_!num!
)
for /f "tokens=3 delims=_" %%i in ('set var_') do set /p=%%i<nul
echo.
for /f "delims==" %%i in ('set var_') do set %%i=
set str3=&set str4=
pause
goto loop

作者: dosmania     时间: 2007-9-22 00:01
强啊~~~
不足之处是没有排除重复现象`和效率应该没我那个高,你用了好多For
digger,有兴趣研究一下猜数字游戏的贴子
http://www.cn-dos.net/forum/viewthread.php?tid=33747&fpage=1
猜数字贴比较有吸引力啊``
这个贴子就告一段落吖``

[ Last edited by dosmania on 2007-9-22 at 12:03 AM ]
作者: digger     时间: 2007-9-22 00:47
效率的高低,并不在于for的多少。
如果你的运气不好,连续N次取到的rnd值都是同一个数字的时候,势必会一直执行 goto loop 语句;如果你真的中了大奖,呵呵,传说中的死循环就出现了。
一直以来,教我的数学老师都不是美女,不玩数字游戏也罢。
作者: dosmania     时间: 2007-9-22 03:12
我运气一向很好,就算我运气不好,也不关我事,代码是写给楼主用的,你去问问楼主运气好不好吖``
哈哈,这个死 digger,这番话我看着怎么就这么耳熟啊,别跟我说你不是飞扬,哈哈
看着那些算法也像我上次在群里问你的那些,被我揭穿了,快加分我!!!!

[ Last edited by dosmania on 2007-9-22 at 03:13 AM ]