|
flybird2020
初级用户
积分 103
发帖 52
注册 2007-4-13
状态 离线
|
『楼 主』:
[求助]如果列举出由随机数字加随机字母组成的4位组合
一个任意数,由两个数字加两个字母组成
如2r3p
i4e5
q56i
这样的组合如何列举?并保存到一个TXT中做变量
在BBS上搜索了随机关键字
无解。。。
谢谢大大们了
|
|
2007-9-20 20:21 |
|
|
Nickey
初级用户
积分 132
发帖 59
注册 2007-8-23 来自 GuangZhou
状态 离线
|
『第
2 楼』:
@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
|
|
2007-9-20 20:39 |
|
|
flybird2020
初级用户
积分 103
发帖 52
注册 2007-4-13
状态 离线
|
『第
3 楼』:
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的话怎么写呢。。。
|
|
2007-9-20 21:12 |
|
|
flybird2020
初级用户
积分 103
发帖 52
注册 2007-4-13
状态 离线
|
|
2007-9-20 21:14 |
|
|
dosmania
初级用户
积分 172
发帖 54
注册 2007-1-2
状态 离线
|
『第
5 楼』:
楼主,你标题是”如何列举出由随机数字加随机字母组成的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 ]
|
|
2007-9-21 03:39 |
|
|
wudixin96
银牌会员
积分 1928
发帖 931
注册 2007-1-6
状态 离线
|
『第
6 楼』:
5楼说的不错,如果给2楼都能加6分,那么偶给你加9分,o(∩_∩)o...哈哈
|
|
2007-9-21 08:46 |
|
|
flybird2020
初级用户
积分 103
发帖 52
注册 2007-4-13
状态 离线
|
|
2007-9-21 08:51 |
|
|
yovie
初级用户
积分 92
发帖 42
注册 2007-8-14 来自 重庆市巫山县
状态 离线
|
『第
8 楼』:
原先写过一个大小写字母+数字的生成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 ]
|
拾人牙慧者! |
|
2007-9-21 09:38 |
|
|
dosmania
初级用户
积分 172
发帖 54
注册 2007-1-2
状态 离线
|
『第
9 楼』:
TO wudixin96:
多谢鼓励,楼主给的分是少了点,没什么诚意啊,哈哈``开玩笑``
To 8 楼:
8 楼的代码跟楼主要求的根本两回事...
而且跟我的方法也不尽相同
”大小写字母+数字的生成11位以内的随机组合“ 这个生成的随机字符个数是无法控制的,当然最多是11个。总之随便看下都知道跟楼主要求的有很大差别。
[ Last edited by dosmania on 2007-9-21 at 02:31 PM ]
|
|
2007-9-21 14:30 |
|
|
wudixin96
银牌会员
积分 1928
发帖 931
注册 2007-1-6
状态 离线
|
『第
10 楼』:
你的回答比较完整、严密
所以给你加分了,哈哈
|
|
2007-9-21 14:35 |
|
|
npgmis
初级用户
积分 32
发帖 17
注册 2007-9-21
状态 离线
|
『第
11 楼』:
看来这有太多的高手,加紧学习中。。。
|
|
2007-9-21 15:15 |
|
|
digger
初级用户
游荡的孤魂
积分 79
发帖 29
注册 2007-4-2 来自 湖南
状态 离线
|
『第
12 楼』:
我也来一段代码凑热闹:
@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
|
|
2007-9-21 23:37 |
|
|
dosmania
初级用户
积分 172
发帖 54
注册 2007-1-2
状态 离线
|
|
2007-9-22 00:01 |
|
|
digger
初级用户
游荡的孤魂
积分 79
发帖 29
注册 2007-4-2 来自 湖南
状态 离线
|
『第
14 楼』:
效率的高低,并不在于for的多少。
如果你的运气不好,连续N次取到的rnd值都是同一个数字的时候,势必会一直执行 goto loop 语句;如果你真的中了大奖,呵呵,传说中的死循环就出现了。
一直以来,教我的数学老师都不是美女,不玩数字游戏也罢。
|
|
2007-9-22 00:47 |
|
|
dosmania
初级用户
积分 172
发帖 54
注册 2007-1-2
状态 离线
|
『第
15 楼』:
我运气一向很好,就算我运气不好,也不关我事,代码是写给楼主用的,你去问问楼主运气好不好吖``
哈哈,这个死 digger,这番话我看着怎么就这么耳熟啊,别跟我说你不是飞扬,哈哈
看着那些算法也像我上次在群里问你的那些,被我揭穿了,快加分我!!!!
[ Last edited by dosmania on 2007-9-22 at 03:13 AM ]
|
|
2007-9-22 03:12 |
|